From 07bf672a90045f8ebb38b34ea8865ed36cd68739 Mon Sep 17 00:00:00 2001 From: Matthew Vernon Date: Tue, 25 Aug 2026 16:18:39 +0100 Subject: [PATCH] New upstream version 10.48~rc1 --- AUTHORS.md | 15 +- CMakeLists.txt | 135 +- ChangeLog | 132 + MODULE.bazel | 2 +- Makefile.am | 26 +- Makefile.in | 49 +- NEWS | 56 + README | 23 +- RunGrepTest | 201 + RunGrepTest.bat | 262 +- RunTest | 9 +- SECURITY.md | 34 +- SUPPORT-LIFECYCLE.md | 262 + aclocal.m4 | 2 +- build.zig | 226 +- build.zig.zon | 25 + cmake/FindEditline.cmake | 5 + cmake/FindReadline.cmake | 17 +- cmake/PCRE2CheckVscript.cmake | 153 +- configure | 2011 ++++- configure.ac | 49 +- .../allocator_src/sljitWXExecAllocatorPosix.c | 3 + deps/sljit/sljit_src/sljitConfig.h | 2 +- deps/sljit/sljit_src/sljitConfigCPU.h | 77 + deps/sljit/sljit_src/sljitConfigInternal.h | 133 +- deps/sljit/sljit_src/sljitLir.c | 11 +- deps/sljit/sljit_src/sljitLir.h | 20 +- deps/sljit/sljit_src/sljitNativeARM_32.c | 2 +- deps/sljit/sljit_src/sljitNativeARM_64.c | 10 +- deps/sljit/sljit_src/sljitNativeARM_T2_32.c | 2 +- .../sljit/sljit_src/sljitNativeLOONGARCH_64.c | 6 +- deps/sljit/sljit_src/sljitNativeMIPS_common.c | 2 +- deps/sljit/sljit_src/sljitNativePPC_common.c | 21 +- deps/sljit/sljit_src/sljitNativeRISCV_64.c | 5 + .../sljit/sljit_src/sljitNativeRISCV_common.c | 55 +- deps/sljit/sljit_src/sljitNativeS390X.c | 2 +- deps/sljit/sljit_src/sljitNativeX86_common.c | 15 +- doc/html/README.txt | 23 +- doc/html/pcre2api.html | 63 +- doc/html/pcre2jit.html | 11 +- doc/html/pcre2partial.html | 16 +- doc/html/pcre2pattern.html | 4 +- doc/html/pcre2test.html | 12 +- doc/pcre2-config.1 | 2 +- doc/pcre2-config.txt | 2 +- doc/pcre2.3 | 2 +- doc/pcre2.txt | 2004 ++--- doc/pcre2_callout_enumerate.3 | 2 +- doc/pcre2_code_copy.3 | 2 +- doc/pcre2_code_copy_with_tables.3 | 2 +- doc/pcre2_code_free.3 | 2 +- doc/pcre2_compile.3 | 2 +- doc/pcre2_compile_context_copy.3 | 2 +- doc/pcre2_compile_context_create.3 | 2 +- doc/pcre2_compile_context_free.3 | 2 +- doc/pcre2_config.3 | 2 +- doc/pcre2_convert_context_copy.3 | 2 +- doc/pcre2_convert_context_create.3 | 2 +- doc/pcre2_convert_context_free.3 | 2 +- doc/pcre2_converted_pattern_free.3 | 2 +- doc/pcre2_dfa_match.3 | 2 +- doc/pcre2_general_context_copy.3 | 2 +- doc/pcre2_general_context_create.3 | 2 +- doc/pcre2_general_context_free.3 | 2 +- doc/pcre2_get_error_message.3 | 2 +- doc/pcre2_get_mark.3 | 2 +- doc/pcre2_get_match_data_heapframes_size.3 | 2 +- doc/pcre2_get_match_data_size.3 | 2 +- doc/pcre2_get_ovector_count.3 | 2 +- doc/pcre2_get_ovector_pointer.3 | 2 +- doc/pcre2_get_startchar.3 | 2 +- doc/pcre2_jit_compile.3 | 2 +- doc/pcre2_jit_free_unused_memory.3 | 2 +- doc/pcre2_jit_match.3 | 2 +- doc/pcre2_jit_stack_assign.3 | 2 +- doc/pcre2_jit_stack_create.3 | 2 +- doc/pcre2_jit_stack_free.3 | 2 +- doc/pcre2_maketables.3 | 2 +- doc/pcre2_maketables_free.3 | 2 +- doc/pcre2_match.3 | 2 +- doc/pcre2_match_context_copy.3 | 2 +- doc/pcre2_match_context_create.3 | 2 +- doc/pcre2_match_context_free.3 | 2 +- doc/pcre2_match_data_create.3 | 2 +- doc/pcre2_match_data_create_from_pattern.3 | 2 +- doc/pcre2_match_data_free.3 | 2 +- doc/pcre2_next_match.3 | 2 +- doc/pcre2_pattern_convert.3 | 2 +- doc/pcre2_pattern_info.3 | 2 +- doc/pcre2_serialize_decode.3 | 2 +- doc/pcre2_serialize_encode.3 | 2 +- doc/pcre2_serialize_free.3 | 2 +- doc/pcre2_serialize_get_number_of_codes.3 | 2 +- doc/pcre2_set_bsr.3 | 2 +- doc/pcre2_set_callout.3 | 2 +- doc/pcre2_set_character_tables.3 | 2 +- doc/pcre2_set_compile_extra_options.3 | 2 +- doc/pcre2_set_compile_recursion_guard.3 | 2 +- doc/pcre2_set_depth_limit.3 | 2 +- doc/pcre2_set_glob_escape.3 | 2 +- doc/pcre2_set_glob_separator.3 | 2 +- doc/pcre2_set_heap_limit.3 | 2 +- doc/pcre2_set_match_limit.3 | 2 +- doc/pcre2_set_max_pattern_compiled_length.3 | 2 +- doc/pcre2_set_max_pattern_length.3 | 2 +- doc/pcre2_set_max_varlookbehind.3 | 2 +- doc/pcre2_set_newline.3 | 2 +- doc/pcre2_set_offset_limit.3 | 2 +- doc/pcre2_set_optimize.3 | 2 +- doc/pcre2_set_parens_nest_limit.3 | 2 +- doc/pcre2_set_recursion_limit.3 | 2 +- doc/pcre2_set_recursion_memory_management.3 | 2 +- doc/pcre2_set_substitute_callout.3 | 2 +- doc/pcre2_set_substitute_case_callout.3 | 2 +- doc/pcre2_substitute.3 | 2 +- doc/pcre2_substring_copy_byname.3 | 2 +- doc/pcre2_substring_copy_bynumber.3 | 2 +- doc/pcre2_substring_free.3 | 2 +- doc/pcre2_substring_get_byname.3 | 2 +- doc/pcre2_substring_get_bynumber.3 | 2 +- doc/pcre2_substring_length_byname.3 | 2 +- doc/pcre2_substring_length_bynumber.3 | 2 +- doc/pcre2_substring_list_free.3 | 2 +- doc/pcre2_substring_list_get.3 | 2 +- doc/pcre2_substring_nametable_scan.3 | 2 +- doc/pcre2_substring_number_from_name.3 | 2 +- doc/pcre2api.3 | 64 +- doc/pcre2build.3 | 2 +- doc/pcre2callout.3 | 2 +- doc/pcre2compat.3 | 2 +- doc/pcre2convert.3 | 2 +- doc/pcre2demo.3 | 2 +- doc/pcre2grep.1 | 2 +- doc/pcre2grep.txt | 2 +- doc/pcre2jit.3 | 13 +- doc/pcre2limits.3 | 2 +- doc/pcre2matching.3 | 2 +- doc/pcre2partial.3 | 17 +- doc/pcre2pattern.3 | 6 +- doc/pcre2perform.3 | 2 +- doc/pcre2posix.3 | 2 +- doc/pcre2sample.3 | 2 +- doc/pcre2serialize.3 | 2 +- doc/pcre2syntax.3 | 2 +- doc/pcre2test.1 | 14 +- doc/pcre2test.txt | 14 +- doc/pcre2unicode.3 | 2 +- m4/ax_check_vscript.m4 | 153 - m4/pcre2_check_vscript.m4 | 118 + patches/pcre2-10.37-Remove-real-POSIX.patch | 40 + .../pcre2-10.39-Fix-incorrect-detection.patch | 73 + patches/pcre2-10.40-A-Fixed-a-unicode.patch | 50 + ...re2-10.40-B-Fixed-an-issue-affecting.patch | 648 ++ ...pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch | 137 + .../pcre2-10.43-Fix-heapframe-overflow.patch | 160 + .../pcre2-10.44-Fix-incorrect-compiling.patch | 64 + patches/pcre2-10.44-Fix-locking-region.patch | 38 + ...2-10.45-Memory-reports-only-compiled.patch | 5228 ++++++++++++ patches/pcre2-10.47-Fix-for-callback.patch | 177 + pcre2-config.in | 20 +- src/config-cmake.h.in | 1 + src/config.h.generic | 9 +- src/config.h.in | 3 + src/{libpcre2-16.sym => libpcre2-16.sym.in} | 7 +- src/{libpcre2-32.sym => libpcre2-32.sym.in} | 7 +- src/{libpcre2-8.sym => libpcre2-8.sym.in} | 7 +- ...bpcre2-posix.sym => libpcre2-posix.sym.in} | 7 +- src/pcre2.h.generic | 7 +- src/pcre2.h.in | 1 + src/pcre2_compile.c | 36 +- src/pcre2_compile_class.c | 25 +- src/pcre2_convert.c | 8 +- src/pcre2_dfa_match.c | 26 +- src/pcre2_error.c | 2 + src/pcre2_internal.h | 29 +- src/pcre2_intmodedep.h | 138 +- src/pcre2_jit_compile.c | 167 +- src/pcre2_jit_match_inc.h | 11 + src/pcre2_jit_misc_inc.h | 38 +- src/pcre2_jit_test.c | 2 + src/pcre2_match.c | 519 +- src/pcre2_serialize.c | 37 +- src/pcre2_substitute.c | 50 +- src/pcre2_substring.c | 7 +- src/pcre2_ucd.c | 7038 +++++++++-------- src/pcre2_ucp.h | 7 +- src/pcre2_ucptables_inc.h | 989 +-- src/pcre2grep.c | 169 +- src/pcre2test.c | 277 +- src/pcre2test_inc.h | 322 +- testdata/grepoutput | 18 + testdata/grepoutput8 | 127 + testdata/testinput10 | 8 + testdata/testinput12 | 9 + testdata/testinput17 | 32 +- testdata/testinput2 | 110 + testdata/testinput26 | 4 +- testdata/testinput27 | 138 +- testdata/testinput5 | 11 + testdata/testoutput10 | 14 + testdata/testoutput12-16 | 16 + testdata/testoutput12-32 | 16 + testdata/testoutput17 | 46 +- testdata/testoutput2 | 255 + testdata/testoutput26 | 4 +- testdata/testoutput27 | 172 +- testdata/testoutput5 | 27 + testdata/testoutput8-16-2 | 38 +- testdata/testoutput8-16-4 | 38 +- testdata/testoutput8-32-4 | 38 +- testdata/testoutput8-8-2 | 38 +- testdata/testoutput8-8-3 | 38 +- testdata/testoutput8-8-4 | 38 +- 213 files changed, 17730 insertions(+), 6872 deletions(-) create mode 100644 SUPPORT-LIFECYCLE.md create mode 100644 build.zig.zon delete mode 100644 m4/ax_check_vscript.m4 create mode 100644 m4/pcre2_check_vscript.m4 create mode 100644 patches/pcre2-10.37-Remove-real-POSIX.patch create mode 100644 patches/pcre2-10.39-Fix-incorrect-detection.patch create mode 100644 patches/pcre2-10.40-A-Fixed-a-unicode.patch create mode 100644 patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch create mode 100644 patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch create mode 100644 patches/pcre2-10.43-Fix-heapframe-overflow.patch create mode 100644 patches/pcre2-10.44-Fix-incorrect-compiling.patch create mode 100644 patches/pcre2-10.44-Fix-locking-region.patch create mode 100644 patches/pcre2-10.45-Memory-reports-only-compiled.patch create mode 100644 patches/pcre2-10.47-Fix-for-callback.patch rename src/{libpcre2-16.sym => libpcre2-16.sym.in} (97%) rename src/{libpcre2-32.sym => libpcre2-32.sym.in} (97%) rename src/{libpcre2-8.sym => libpcre2-8.sym.in} (97%) rename src/{libpcre2-posix.sym => libpcre2-posix.sym.in} (73%) diff --git a/AUTHORS.md b/AUTHORS.md index ced81e6..4aa4ed0 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -77,9 +77,11 @@ All names listed alphabetically. ### Contributors to PCRE2 -This list includes names up until the PCRE2 10.47 release. New names will be +This list includes names up until the PCRE2 10.48 release. New names will be added from the Git history on each release. + Ilia Alshanetsky + Bernard Assan Scott Bell Carlo Marcelo Arenas Belón Edward Betts @@ -91,6 +93,7 @@ added from the Git history on each release. Alejandro Colomar Jeremie Courreges-Anglas Addison Crump + Weixie Cui Alex Dowad Daniel Engberg Marco Feuerstein @@ -98,7 +101,9 @@ added from the Git history on each release. Isaac Oscar Gariano David Gaussmann Andrey Gorbachev + Nikolay Govorov Jordan Griege + Rudi Heitbaum Jason Hood Bumsu Hyeon Roy Ivy @@ -106,21 +111,28 @@ added from the Git history on each release. Martin Joerg Guillem Jover Ralf Junker + Anton Karpov Ayesh Karunaratne Michael Kaufmann + Srijan Keshri Yunho Kim Joshua Kinard David Korczynski Uwe Korn Jonas Kvinge Kristian Larsson + Lin Runze Kai Lu Behzod Mansurov + Brian McKenna B. Scott Michel Greg Minshall Nathan Moinvaziri + Alexandre Moyer Mike Munday Marc Mutz + Kartik Naik + NaN Fabio Pagani Christian Persch Alex Reinking @@ -138,6 +150,7 @@ added from the Git history on each release. Greg Thain Lucas Trzesniewski Theodore Tsirpanis + Matt Turner Aaron M. Ucko Matthew Vernon Rémi Verschelde diff --git a/CMakeLists.txt b/CMakeLists.txt index c970996..701233a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,7 +146,7 @@ endif() # setting CMAKE_MODULE_PATH on the command line. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) -# external packages +# External packages find_package(BZip2) find_package(ZLIB) find_package(Readline) @@ -178,19 +178,25 @@ check_include_file(windows.h HAVE_WINDOWS_H) pcre2_use_system_extensions() cmake_push_check_state(RESET) -# Somewhat awkward code to propagate the _GNU_SOURCE definition (added to -# COMPILE_DEFINITIONS by pcre2_use_system_extensions()). +# Propagate the _GNU_SOURCE definition (added to COMPILE_DEFINITIONS by +# pcre2_use_system_extensions()) so that these check_symbol_exists() calls +# can find symbols only exposed with _GNU_SOURCE. +# We only pass through known plain-text definitions (like _GNU_SOURCE) and +# skip anything else (e.g. generator expressions inherited from a parent +# project), because try_compile() cannot handle generator expressions. get_directory_property(_pcre2_compile_definitions COMPILE_DEFINITIONS) if(DEFINED _pcre2_compile_definitions) set(CMAKE_REQUIRED_DEFINITIONS "") - foreach(_def IN LISTS _pcre2_compile_definitions) - list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D${_def}") - endforeach() + list(FIND _pcre2_compile_definitions "_GNU_SOURCE" _idx) + if(_idx GREATER -1) + list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") + endif() endif() check_symbol_exists(mkostemp stdlib.h HAVE_MKOSTEMP) # glibc 2.7 check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE) # glibc 2.27 check_symbol_exists(secure_getenv "stdlib.h" HAVE_SECURE_GETENV) # glibc 2.17 +check_symbol_exists(setrlimit "sys/resource.h" HAVE_SETRLIMIT) cmake_pop_check_state() check_c_source_compiles( @@ -269,7 +275,7 @@ check_c_source_compiles( # Detect support for linker scripts. -pcre2_check_vscript(HAVE_VSCRIPT VSCRIPT_FLAG) +pcre2_check_vscript(HAVE_VSCRIPT VSCRIPT_FLAG HAVE_VSCRIPT_NO_STAR) # Check whether Intel CET is enabled, and if so, adjust compiler flags. This # code was written by PH, trying to imitate the logic from the autotools @@ -446,7 +452,7 @@ if(HAVE_VSCRIPT) endif() # bzip2 lib -if(BZIP2_FOUND) +if(BZip2_FOUND) option(PCRE2_SUPPORT_LIBBZ2 "Enable support for linking pcre2grep with libbz2." ON) endif() @@ -456,12 +462,12 @@ if(ZLIB_FOUND) endif() # editline lib -if(EDITLINE_FOUND) +if(Editline_FOUND) option(PCRE2_SUPPORT_LIBEDIT "Enable support for linking pcre2test with libedit." OFF) endif() # readline lib -if(READLINE_FOUND) +if(Readline_FOUND) option(PCRE2_SUPPORT_LIBREADLINE "Enable support for linking pcre2test with libreadline." ON) endif() @@ -498,12 +504,12 @@ if(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8) endif() if(PCRE2_SUPPORT_LIBBZ2) - if(BZIP2_FOUND) - include_directories(${BZIP2_INCLUDE_DIR}) + if(BZip2_FOUND) + include_directories(${BZIP2_INCLUDE_DIRS}) else() message( FATAL_ERROR - " libbz2 not found. Set BZIP2_INCLUDE_DIR to a compatible header\n" + " libbz2 not found. Set BZIP2_INCLUDE_DIRS to a compatible header\n" " or set BZip2_ROOT to a full bzip2 installed tree, as needed." ) endif() @@ -511,42 +517,42 @@ endif() if(PCRE2_SUPPORT_LIBZ) if(ZLIB_FOUND) - include_directories(${ZLIB_INCLUDE_DIR}) + include_directories(${ZLIB_INCLUDE_DIRS}) else() message( FATAL_ERROR - " zlib not found. Set ZLIB_INCLUDE_DIR to a compatible header\n" + " zlib not found. Set ZLIB_INCLUDE_DIRS to a compatible header\n" " or set ZLIB_ROOT to a full zlib installed tree, as needed." ) endif() endif() if(PCRE2_SUPPORT_LIBEDIT) - if(EDITLINE_FOUND) - include_directories(${EDITLINE_INCLUDE_DIR}) + if(Editline_FOUND) + include_directories(${EDITLINE_INCLUDE_DIRS}) else() message( FATAL_ERROR - " libedit not found. Set EDITLINE_INCLUDE_DIR to a compatible header\n" + " libedit not found. Set EDITLINE_INCLUDE_DIRS to a compatible header\n" " or set Editline_ROOT to a full libedit installed tree, as needed." ) endif() endif() if(PCRE2_SUPPORT_LIBREADLINE) - if(READLINE_FOUND) - include_directories(${READLINE_INCLUDE_DIR}) + if(Readline_FOUND) + include_directories(${READLINE_INCLUDE_DIRS}) else() message( FATAL_ERROR - " libreadline not found. Set READLINE_INCLUDE_DIR to a compatible header\n" + " libreadline not found. Set READLINE_INCLUDE_DIRS to a compatible header\n" " or set Readline_ROOT to a full libreadline installed tree, as needed." ) endif() endif() if(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT) - if(READLINE_FOUND) + if(Readline_FOUND) message( FATAL_ERROR " Only one of the readline compatible libraries can be enabled.\n" @@ -603,24 +609,16 @@ endif() set(PCRE2TEST_LIBS) set(PCRE2GREP_LIBS) -# This next one used to reference ${READLINE_LIBRARY}) -# but I was advised to add the NCURSES test as well, along with -# some modifications to cmake/FindReadline.cmake which should -# make it possible to override the default if necessary. PH - if(PCRE2_SUPPORT_LIBREADLINE) set(SUPPORT_LIBREADLINE 1) - list(APPEND PCRE2TEST_LIBS ${READLINE_LIBRARY}) - if(DEFINED NCURSES_LIBRARY) - list(APPEND PCRE2TEST_LIBS ${NCURSES_LIBRARY}) - endif() + list(APPEND PCRE2TEST_LIBS ${READLINE_LIBRARIES}) endif() # libedit is a plug-compatible alternative to libreadline if(PCRE2_SUPPORT_LIBEDIT) set(SUPPORT_LIBEDIT 1) - list(APPEND PCRE2TEST_LIBS ${EDITLINE_LIBRARY}) + list(APPEND PCRE2TEST_LIBS ${EDITLINE_LIBRARIES}) endif() if(PCRE2_SUPPORT_LIBZ) @@ -705,10 +703,6 @@ endif() file(REMOVE ${PROJECT_SOURCE_DIR}/src/config.h) file(REMOVE ${PROJECT_SOURCE_DIR}/src/pcre2.h) -# Output files - -configure_file(src/config-cmake.h.in ${PROJECT_BINARY_DIR}/src/config.h @ONLY) - # Parse version numbers and date out of configure.ac file( @@ -765,13 +759,26 @@ parse_lib_version(LIBPCRE2_8) parse_lib_version(LIBPCRE2_16) parse_lib_version(LIBPCRE2_32) +# Output files + +configure_file(src/config-cmake.h.in ${PROJECT_BINARY_DIR}/src/config.h @ONLY) + configure_file(src/pcre2.h.in ${PROJECT_BINARY_DIR}/interface/pcre2.h @ONLY) configure_file(src/pcre2posix.h ${PROJECT_BINARY_DIR}/interface/pcre2posix.h COPYONLY) -# Make sure to not link debug libs -# against release libs and vice versa -if(WIN32) - set(CMAKE_DEBUG_POSTFIX "d") +# Configure the version script files. + +if(HAVE_VSCRIPT AND PCRE2_SYMVERS) + if(HAVE_VSCRIPT_NO_STAR) + set(PCRE2_EXTRA_LOCAL_SYMS "") + else() + set(PCRE2_EXTRA_LOCAL_SYMS " local: *;") + endif() + + configure_file(src/libpcre2-8.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym @ONLY) + configure_file(src/libpcre2-16.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym @ONLY) + configure_file(src/libpcre2-32.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym @ONLY) + configure_file(src/libpcre2-posix.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym @ONLY) endif() # Character table generation @@ -896,9 +903,13 @@ if(MSVC) add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS) endif() +# Make sure to not link debug libs against release libs and vice versa. +if(WIN32) + set(CMAKE_DEBUG_POSTFIX "d") +endif() + set(TARGETS) set(DLL_PDB_FILES) -set(DLL_PDB_DEBUG_FILES) # 8-bit library @@ -972,12 +983,11 @@ if(PCRE2_BUILD_PCRE2_8) target_link_libraries(pcre2-8-shared Threads::Threads) endif() if(HAVE_VSCRIPT AND PCRE2_SYMVERS) - target_link_options(pcre2-8-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-8.sym) - set_target_properties(pcre2-8-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-8.sym) + target_link_options(pcre2-8-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-8.sym) + set_target_properties(pcre2-8-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym) endif() list(APPEND TARGETS pcre2-8-shared) - list(APPEND DLL_PDB_FILES $/pcre2-8.pdb) - list(APPEND DLL_PDB_DEBUG_FILES $/pcre2-8d.pdb) + list(APPEND DLL_PDB_FILES $) add_library(pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES}) target_include_directories( @@ -995,14 +1005,13 @@ if(PCRE2_BUILD_PCRE2_8) OUTPUT_NAME pcre2-posix ) if(HAVE_VSCRIPT AND PCRE2_SYMVERS) - target_link_options(pcre2-posix-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-posix.sym) - set_target_properties(pcre2-posix-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-posix.sym) + target_link_options(pcre2-posix-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym) + set_target_properties(pcre2-posix-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym) endif() target_compile_definitions(pcre2-posix-shared PUBLIC PCRE2POSIX_SHARED) target_link_libraries(pcre2-posix-shared pcre2-8-shared) list(APPEND TARGETS pcre2-posix-shared) - list(APPEND DLL_PDB_FILES $/pcre2-posix.pdb) - list(APPEND DLL_PDB_DEBUG_FILES $/pcre2-posixd.pdb) + list(APPEND DLL_PDB_FILES $) if(MINGW) if(NON_STANDARD_LIB_PREFIX) @@ -1077,12 +1086,11 @@ if(PCRE2_BUILD_PCRE2_16) target_link_libraries(pcre2-16-shared Threads::Threads) endif() if(HAVE_VSCRIPT AND PCRE2_SYMVERS) - target_link_options(pcre2-16-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-16.sym) - set_target_properties(pcre2-16-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-16.sym) + target_link_options(pcre2-16-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-16.sym) + set_target_properties(pcre2-16-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym) endif() list(APPEND TARGETS pcre2-16-shared) - list(APPEND DLL_PDB_FILES $/pcre2-16.pdb) - list(APPEND DLL_PDB_DEBUG_FILES $/pcre2-16d.pdb) + list(APPEND DLL_PDB_FILES $) if(MINGW) if(NON_STANDARD_LIB_PREFIX) @@ -1155,12 +1163,11 @@ if(PCRE2_BUILD_PCRE2_32) target_link_libraries(pcre2-32-shared Threads::Threads) endif() if(HAVE_VSCRIPT AND PCRE2_SYMVERS) - target_link_options(pcre2-32-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_SOURCE_DIR}/src/libpcre2-32.sym) - set_target_properties(pcre2-32-shared PROPERTIES LINK_DEPENDS ${PROJECT_SOURCE_DIR}/src/libpcre2-32.sym) + target_link_options(pcre2-32-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-32.sym) + set_target_properties(pcre2-32-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym) endif() list(APPEND TARGETS pcre2-32-shared) - list(APPEND DLL_PDB_FILES $/pcre2-32.pdb) - list(APPEND DLL_PDB_DEBUG_FILES $/pcre2-32d.pdb) + list(APPEND DLL_PDB_FILES $) if(MINGW) if(NON_STANDARD_LIB_PREFIX) @@ -1478,6 +1485,7 @@ file( NEWS README SECURITY.md + SUPPORT-LIFECYCLE.md ) file(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1) file(GLOB man3 ${PROJECT_SOURCE_DIR}/doc/*.3) @@ -1488,8 +1496,11 @@ install(FILES ${txts} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2) install(FILES ${html} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2/html) if(MSVC AND INSTALL_MSVC_PDB) - install(FILES ${DLL_PDB_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS RelWithDebInfo) - install(FILES ${DLL_PDB_DEBUG_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug) + install( + FILES ${DLL_PDB_FILES} + DESTINATION ${CMAKE_INSTALL_BINDIR} + CONFIGURATIONS Debug RelWithDebInfo + ) endif() # Help, only for nice output @@ -1589,17 +1600,17 @@ if(PCRE2_SHOW_REPORT) else() message(STATUS " Link pcre2grep with libz .......... : Library not found") endif() - if(BZIP2_FOUND) + if(BZip2_FOUND) message(STATUS " Link pcre2grep with libbz2 ........ : ${PCRE2_SUPPORT_LIBBZ2}") else() message(STATUS " Link pcre2grep with libbz2 ........ : Library not found") endif() - if(EDITLINE_FOUND) + if(Editline_FOUND) message(STATUS " Link pcre2test with libeditline ... : ${PCRE2_SUPPORT_LIBEDIT}") else() message(STATUS " Link pcre2test with libeditline ... : Library not found") endif() - if(READLINE_FOUND) + if(Readline_FOUND) message(STATUS " Link pcre2test with libreadline ... : ${PCRE2_SUPPORT_LIBREADLINE}") else() message(STATUS " Link pcre2test with libreadline ... : Library not found") diff --git a/ChangeLog b/ChangeLog index 95cfa9e..8c67c7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,138 @@ there is also the log of commit messages. Internal changes which are not visible to clients of the library are mostly not listed here. + +Version 10.48 27-August-2026 +---------------------------- + +1. (#826) [GHSA-q7rw-r7qq-2hx6] Initialized alignment padding in serialized +character lists so that pcre2_serialize_encode() does not expose two +uninitialised bytes from malloc(). + +2. (#825) Fixed the casing of CMake package variables and corrected +Readline/ncurses linkage. + +3. (#830) Updated Unicode support to Unicode 17.0, including new scripts, +characters, properties, case mappings, and emoji data. + +4. (a9d4a748) Renamed the default development branch from master to main. + +5. (574f5683) Allowed PCRE2_NO_UTF_CHECK to differ between an existing match +and pcre2_substitute() with PCRE2_SUBSTITUTE_MATCHED, instead of returning +PCRE2_ERROR_DIFFSUBSOPTIONS. + +6. (#841) Fixed incorrect compilation and matching of character classes that +combine characters from multiple internal ranges, including characters at or +below U+00FF together with characters at U+0100 and U+8000 or above. + +7. (#849) Reduced the memory used by each pcre2_match() heap frame by shrinking +temporary fields. + +8. (#852) Added interpreter and JIT support for possessive repeats of +backreferences. + +9. (#857) Fixed a regression in pcre2_substitute() that mishandled repeated +backslash escapes in extended replacement strings. + +10. (#858) Added improvements to pcre2_substitute(). Support for partial matches +with PCRE2_SUBSTITUTE_REPLACEMENT_ONLY added, and added +PCRE2_ERROR_PARTIALSUBS for replacements containing $' or $_ which cannot be +expanded for partial matches. + +11. (#859, 30c9faa4) Expanded pcre2-config's recognition of system library +directories on Linux (multilib and multiarch), and AIX and Solaris, avoiding +unnecessary -L options. + +12. (#875) Fixed a stale repeat value while constructing JIT scan prefixes, +which could cause missed matches when a prefix was followed by a bounded +character-class repeat with a zero minimum. + +13. (#879) Fixed build warnings in pcre2grep with C23 and glibc 2.43, by retaining +const qualifiers from strstr() and strchr(). + +14. (#883) Prevented generator expressions inherited from a parent CMake +project from entering CMAKE_REQUIRED_DEFINITIONS during configuration checks. + +15. (#884, #880) Made symbol-version scripts platform-specific, fixing Solaris SPARC +symbol versioning. + +16. (#888) Fixed memory leaks and stale-pointer double frees when +pcre2_deserialize_decode() rejects an invalid block size. + +17. (#894) Updated Zig's build.zig, including exported headers, hidden symbol +visibility, and sanitizer support. + +18. (#893) Changed pcre2test builds to detect setrlimit() instead of relying on +a hard-coded platform list. + +19. (#907) Added support for installing PCRE2 directly with `zig fetch`, +including a Zig package manifest and release integration. + +20. (#912) Fixed a JIT-specific bug in variable-length lookbehinds which caused +incorrect match results during backtracking. + +21. (#863) Added a five-year support lifecycle policy and publication of backport +patches for security and high-severity fixes in older releases. + +22. (#937) Fixed a leak and later invalid free when calling the fast-path +pcre2_jit_match() function with a match data object previously used with +pcre2_match() and PCRE2_COPY_MATCHED_SUBJECT. No security advisory, as this is +considered unlikely to affect applications. + +23. (#936) Made pcre2grep recognize -- during positional argument processing, +for improved compatibility with GNU grep. + +24. (#922) Added support for Zig JIT builds to fetch SLJIT through the Zig +package manager when the Git submodule is absent. The minimum Zig version +is raised to 0.16.0. + +25. (#926) [GHSA-2p8c-ff85-vh9x] If pcre2_jit_compile() is called with options +for some match modes, and then pcre2_match() is used to perform a match for a +different match mode, an out-of-bounds read can occur if the match is attempted +against invalid UTF input. The interpreter fallback now performs its own UTF +validation correctly when some JIT match modes have been compiled, but not the +requested mode. + +26. (#909) [GHSA-q8g2-wprr-34m9] If pcre2_convert() is called on untrusted input +on platforms with 32-bit size_t, an out-of-bounds heap write can occur. +Additionally, the allocation made was larger than required in common cases. +Added overflow checks for allocations in pattern conversion and substring APIs. + +27. (#945) Fixed JIT character advancement with PCRE2_MATCH_INVALID_UTF in +UTF-8 and UTF-16 modes. Valid multi-code-unit characters are now advanced as a +unit, while invalid characters advance by one code unit, preventing adjacent +characters from being skipped. + +28. (#948) Fixed one-past-the-end compile error offsets for incomplete \x{, +\o{, and \N{U+ escapes at the end of a pattern. + +29. (#947) Clarified documentation for PCRE2_DFA_RESTART, which does not remove +the requirement to retain previously supplied subject data, including sufficient +history for nested lookbehinds. + +30. (#942, #954) Fixed pcre2grep handling for \K matches whose end offset precedes +their start offset. Such ranges could previously cause an unsigned match-length +underflow. + +31. (#956) Fixed an integer overflow in pcre2grep when advancing multiline +output state, and preserved pending output when crossing lines. + +32. (#957) Updated bundled SLJIT with architecture-specific code-generation and +portability fixes. + +33. (#958) Fixed CMake installation of MSVC PDB files when +CMAKE_SHARED_LIBRARY_PREFIX_C is customized. + +34. (#961, #962) Fixed two compilation issues preventing use of extended +(Boolean) character classes before a lookbehind, or inside a lookaround. + +35. [GHSA-fmgr-6ggq-9859] Withheld + +36. [GHSA-9qww-pwc4-77qq] Withheld + +37. [GHSA-3r4p-g7gg-ppmf] Withheld + + Version 10.47 21-October-2025 ----------------------------- diff --git a/MODULE.bazel b/MODULE.bazel index abed25a..7024259 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module( name = "pcre2", - version = "10.47", + version = "10.48-RC1", compatibility_level = 1, ) diff --git a/Makefile.am b/Makefile.am index da5e3d9..f6f584a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,6 +23,7 @@ dist_doc_DATA = \ NEWS \ README \ SECURITY.md \ + SUPPORT-LIFECYCLE.md \ doc/pcre2.txt \ doc/pcre2-config.txt \ doc/pcre2grep.txt \ @@ -278,8 +279,8 @@ EXTRA_DIST = # These files contain additional m4 macros that are used by autoconf. EXTRA_DIST += \ - m4/ax_check_vscript.m4 \ m4/ax_pthread.m4 \ + m4/pcre2_check_vscript.m4 \ m4/pcre2_visibility.m4 \ m4/pcre2_zos.m4 @@ -289,12 +290,27 @@ EXTRA_DIST += \ NON-AUTOTOOLS-BUILD \ HACKING +# These are patches containing backports for older versions of PCRE2 + +EXTRA_DIST += \ + patches/pcre2-10.37-Remove-real-POSIX.patch \ + patches/pcre2-10.39-Fix-incorrect-detection.patch \ + patches/pcre2-10.40-A-Fixed-a-unicode.patch \ + patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch \ + patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch \ + patches/pcre2-10.43-Fix-heapframe-overflow.patch \ + patches/pcre2-10.44-Fix-incorrect-compiling.patch \ + patches/pcre2-10.44-Fix-locking-region.patch \ + patches/pcre2-10.45-Memory-reports-only-compiled.patch \ + patches/pcre2-10.47-Fix-for-callback.patch + # These are support files for building with Bazel or Zig EXTRA_DIST += \ BUILD.bazel \ MODULE.bazel \ - build.zig + build.zig \ + build.zig.zon # These are support files for building under VMS @@ -897,11 +913,11 @@ pkgconfig_DATA += libpcre2-32.pc endif -# Symbol version files for use with GNU and Sun ld. +# Symbol version template files for use with GNU and Sun ld. EXTRA_DIST += \ - src/libpcre2-8.sym src/libpcre2-16.sym src/libpcre2-32.sym \ - src/libpcre2-posix.sym + src/libpcre2-8.sym.in src/libpcre2-16.sym.in src/libpcre2-32.sym.in \ + src/libpcre2-posix.sym.in # gcov/lcov code coverage reporting diff --git a/Makefile.in b/Makefile.in index 35f2abe..2a26fc9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -157,10 +157,11 @@ noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ @WITH_GCOV_FALSE@am__append_55 = coverage-distclean subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_vscript.m4 \ - $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/pcre2_check_vscript.m4 \ $(top_srcdir)/m4/pcre2_visibility.m4 \ $(top_srcdir)/m4/pcre2_zos.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -174,7 +175,8 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc \ - libpcre2-posix.pc pcre2-config src/pcre2.h + libpcre2-posix.pc pcre2-config src/pcre2.h src/libpcre2-8.sym \ + src/libpcre2-16.sym src/libpcre2-32.sym src/libpcre2-posix.sym CONFIG_CLEAN_VPATH_FILES = @WITH_PCRE2_8_TRUE@am__EXEEXT_1 = pcre2grep$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ @@ -895,6 +897,10 @@ am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(srcdir)/libpcre2-16.pc.in $(srcdir)/libpcre2-32.pc.in \ $(srcdir)/libpcre2-8.pc.in $(srcdir)/libpcre2-posix.pc.in \ $(srcdir)/pcre2-config.in $(top_srcdir)/src/config.h.in \ + $(top_srcdir)/src/libpcre2-16.sym.in \ + $(top_srcdir)/src/libpcre2-32.sym.in \ + $(top_srcdir)/src/libpcre2-8.sym.in \ + $(top_srcdir)/src/libpcre2-posix.sym.in \ $(top_srcdir)/src/pcre2.h.in AUTHORS.md COPYING ChangeLog \ INSTALL NEWS README ar-lib compile config.guess config.sub \ depcomp install-sh ltmain.sh missing test-driver @@ -998,6 +1004,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE2POSIX_CFLAG = @PCRE2POSIX_CFLAG@ PCRE2_DATE = @PCRE2_DATE@ +PCRE2_EXTRA_LOCAL_SYMS = @PCRE2_EXTRA_LOCAL_SYMS@ PCRE2_MAJOR = @PCRE2_MAJOR@ PCRE2_MINOR = @PCRE2_MINOR@ PCRE2_PRERELEASE = @PCRE2_PRERELEASE@ @@ -1019,7 +1026,6 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ VALGRIND_LIBS = @VALGRIND_LIBS@ VERSION = @VERSION@ VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@ -VSCRIPT_LDFLAGS = @VSCRIPT_LDFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -1091,6 +1097,7 @@ dist_doc_DATA = \ NEWS \ README \ SECURITY.md \ + SUPPORT-LIFECYCLE.md \ doc/pcre2.txt \ doc/pcre2-config.txt \ doc/pcre2grep.txt \ @@ -1335,6 +1342,8 @@ MAINTAINERCLEANFILES = src/pcre2.h.generic src/config.h.generic # These files contain maintenance information +# These are patches containing backports for older versions of PCRE2 + # These are support files for building with Bazel or Zig # These are support files for building under VMS @@ -1352,10 +1361,20 @@ MAINTAINERCLEANFILES = src/pcre2.h.generic src/config.h.generic # PCRE2 demonstration program. Not built automatically. The point is that the # users should build it themselves. So just distribute the source. -# Symbol version files for use with GNU and Sun ld. -EXTRA_DIST = m4/ax_check_vscript.m4 m4/ax_pthread.m4 \ +# Symbol version template files for use with GNU and Sun ld. +EXTRA_DIST = m4/ax_pthread.m4 m4/pcre2_check_vscript.m4 \ m4/pcre2_visibility.m4 m4/pcre2_zos.m4 NON-AUTOTOOLS-BUILD \ - HACKING BUILD.bazel MODULE.bazel build.zig vms/configure.com \ + HACKING patches/pcre2-10.37-Remove-real-POSIX.patch \ + patches/pcre2-10.39-Fix-incorrect-detection.patch \ + patches/pcre2-10.40-A-Fixed-a-unicode.patch \ + patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch \ + patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch \ + patches/pcre2-10.43-Fix-heapframe-overflow.patch \ + patches/pcre2-10.44-Fix-incorrect-compiling.patch \ + patches/pcre2-10.44-Fix-locking-region.patch \ + patches/pcre2-10.45-Memory-reports-only-compiled.patch \ + patches/pcre2-10.47-Fix-for-callback.patch BUILD.bazel \ + MODULE.bazel build.zig build.zig.zon vms/configure.com \ vms/openvms_readme.txt vms/pcre2.h_patch vms/stdint.h \ src/pcre2.h.generic src/config.h.generic \ src/pcre2_chartables.c.dist \ @@ -1440,8 +1459,8 @@ EXTRA_DIST = m4/ax_check_vscript.m4 m4/ax_pthread.m4 \ testdata/testoutputheap-16 testdata/testoutputheap-32 \ testdata/testoutputheap-8 testdata/valgrind-jit.supp \ testdata/wintestinput3 testdata/wintestoutput3 perltest.sh \ - src/pcre2demo.c src/libpcre2-8.sym src/libpcre2-16.sym \ - src/libpcre2-32.sym src/libpcre2-posix.sym \ + src/pcre2demo.c src/libpcre2-8.sym.in src/libpcre2-16.sym.in \ + src/libpcre2-32.sym.in src/libpcre2-posix.sym.in \ cmake/COPYING-CMAKE-SCRIPTS cmake/FindEditline.cmake \ cmake/FindReadline.cmake cmake/pcre2-config.cmake.in \ cmake/PCRE2CheckVscript.cmake \ @@ -1693,6 +1712,14 @@ pcre2-config: $(top_builddir)/config.status $(srcdir)/pcre2-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ src/pcre2.h: $(top_builddir)/config.status $(top_srcdir)/src/pcre2.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ +src/libpcre2-8.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-8.sym.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +src/libpcre2-16.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-16.sym.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +src/libpcre2-32.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-32.sym.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +src/libpcre2-posix.sym: $(top_builddir)/config.status $(top_srcdir)/src/libpcre2-posix.sym.in + cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ diff --git a/NEWS b/NEWS index cbe60b6..94d81b3 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,62 @@ News about PCRE2 releases ------------------------- +Version 10.48 27-August-2026 +---------------------------- + +This is a regular release, incorporating security fixes along with small +improvements and fixes to library behaviour. + +Only changes to behaviour, changes to the API, and other significant changes +are described here. Please see the ChangeLog and Git log for further details. + +* (Git change) Renamed the default development branch from master to main. + +* (Maintenance change) Added a five-year support lifecycle policy and +publication of backport patches for security and high-severity fixes in older +releases. + +* (Security fix for very specific API usage, GHSA-2p8c-ff85-vh9x) If +pcre2_jit_compile() is called with options for some match modes, and then +pcre2_match() is used to perform a match for a different match mode, an +out-of-bounds read can occur if the match is attempted against invalid UTF input. + +* (Security fix for pattern conversion, GHSA-q8g2-wprr-34m9) If pcre2_convert() +is called on untrusted input on platforms with 32-bit size_t, an out-of-bounds +heap write can occur. + +* (Security fix, GHSA-fmgr-6ggq-9859) Withheld + +* (Security fix, GHSA-9qww-pwc4-77qq) Withheld + +* (Security fix, GHSA-3r4p-g7gg-ppmf) Withheld + +* (Matching correctness) Fixed several matching issues: + - A JIT-specific matching bug affecting prefix scanning on patterns with + repeats (#875). + - A JIT-specific matching bug in variable-length lookbehinds (#912). + - Miscompiled Unicode character classes combining characters at or below + U+00FF with characters at U+0100 and U+8000 or above (#841). + - Incorrect JIT character advancement with PCRE2_MATCH_INVALID_UTF in UTF-8 + and UTF-16 modes, which could skip adjacent characters (#945). + +* (Behaviour change) Updated Unicode support to Unicode 17.0. + +* (Small behaviour changes) Many small fixes, including pcre2_substitute() +improvements, optimisation of possessive backreference matching, and +pcre2_compile() fixes. + +* (Small build changes) Many small adjustments to the CMake and Zig builds. + +* (Security fix for very specific API usage, #937) Fixed a leak and later +invalid free when calling the fast-path pcre2_jit_match() function with a match +data object previously used with pcre2_match() and +PCRE2_COPY_MATCHED_SUBJECT. + +* (Low-severity security fix, GHSA-q7rw-r7qq-2hx6) Fixed exposure of two +uninitialised bytes from malloc() via pcre2_serialize_encode(). + + Version 10.47 21-October-2025 ----------------------------- diff --git a/README b/README index 593bab2..3adf495 100644 --- a/README +++ b/README @@ -519,13 +519,14 @@ system. The following are installed (file names are all relative to the *.html (lots more pages, hyperlinked from index.html) Text file documentation (share/doc/pcre2): - AUTHORS + AUTHORS.md COPYING ChangeLog - LICENCE + LICENCE.md NEWS README - SECURITY + SECURITY.md + SUPPORT-LIFECYCLE.md pcre2.txt (a concatenation of the man(3) pages) pcre2test.txt the pcre2test man page pcre2grep.txt the pcre2grep man page @@ -920,6 +921,7 @@ The distribution should contain the files listed below. LICENCE.md conditions for the use of PCRE2 COPYING the same, using GNU's standard name SECURITY.md information on reporting vulnerabilities + SUPPORT-LIFECYCLE.md information on the support policy Makefile.in ) template for Unix Makefile, which is built by ) "configure" Makefile.am ) the automake input that was used to create @@ -962,10 +964,10 @@ The distribution should contain the files listed below. testdata/testoutput* expected test results testdata/grep* input and output for pcre2grep tests testdata/* other supporting test files - src/libpcre2-8.sym ) - src/libpcre2-16.sym ) symbol version scripts for the GNU and Sun linkers - src/libpcre2-32.sym ) - src/libpcre2-posix.sym ) + src/libpcre2-8.sym.in ) + src/libpcre2-16.sym.in ) symbol version script templates for the + src/libpcre2-32.sym.in ) GNU, BSD and Sun linkers + src/libpcre2-posix.sym.in ) (D) Auxiliary files for CMake support @@ -991,6 +993,7 @@ The distribution should contain the files listed below. BUILD.bazel ) files used by the Bazel MODULE.bazel ) build system build.zig file used by zig's build system + build.zig.zon file used by zig's package manager (G) Auxiliary files for building PCRE2 under OpenVMS @@ -999,7 +1002,7 @@ The distribution should contain the files listed below. vms/pcre2.h_patch ) vms/stdint.h ) -============================= -Last updated: 15 October 2025 -============================= +============================ +Last updated: 08 August 2026 +============================ diff --git a/RunGrepTest b/RunGrepTest index 76af369..eaed73f 100755 --- a/RunGrepTest +++ b/RunGrepTest @@ -811,6 +811,17 @@ echo "RC=$?" >>testtrygrep echo "---------------------------- Test 147 -----------------------------" >>testtrygrep $valgrind $vjs $pcre2grep -e '123|fox' -- -nonfile >>testtrygrep 2>&1 echo "RC=$?" >>testtrygrep +printf 'A123B' >testtemp1grep +printf 'C123D' > ./-testtemp1grep +$valgrind $vjs $pcre2grep '123' -- -testtemp1grep >>testtrygrep 2>&1 +echo "RC=$?" >>testtrygrep +$valgrind $vjs $pcre2grep '123' testtemp1grep -- -testtemp1grep >>testtrygrep 2>&1 +echo "RC=$?" >>testtrygrep +$valgrind $vjs $pcre2grep '123' -- >testtrygrep 2>&1 +echo "RC=$?" >>testtrygrep +printf 'E123F' > ./-- +$valgrind $vjs $pcre2grep -- '123' -- >>testtrygrep 2>&1 +echo "RC=$?" >>testtrygrep echo "---------------------------- Test 148 -----------------------------" >>testtrygrep $valgrind $vjs $pcre2grep --nonexist >>testtrygrep 2>&1 @@ -916,6 +927,17 @@ echo "RC=$?" >>testtrygrep (cd $srcdir; $valgrind $vjs $pcre2grep -n -B4 -A2 '^(ert|dfg)' ./testdata/grepinput) >>testtrygrep echo "RC=$?" >>testtrygrep +echo "---------------------------- Test 161 -----------------------------" >>testtrygrep +printf 'XfooY\n' >testNinputgrep +$valgrind $vjs $pcre2grep --allow-lookaround-bsk -o '(?=foo\K)' testNinputgrep >>testtrygrep +echo "RC=$?" >>testtrygrep +$valgrind $vjs $pcre2grep --allow-lookaround-bsk --output '$0' '(?=foo\K)' testNinputgrep >>testtrygrep +echo "RC=$?" >>testtrygrep +$valgrind $vjs $pcre2grep --allow-lookaround-bsk --line-offsets '(?=foo\K)' testNinputgrep >>testtrygrep +echo "RC=$?" >>testtrygrep +$valgrind $vjs $pcre2grep --allow-lookaround-bsk --file-offsets '(?=foo\K)' testNinputgrep >>testtrygrep +echo "RC=$?" >>testtrygrep + # Now compare the results. @@ -968,6 +990,184 @@ if [ $utf8 -ne 0 ] ; then (cd $srcdir; $valgrind $vjs $pcre2grep -u --posix-digit --colour=always 'A\d' ./testdata/grepinput8) >>testtrygrep echo "RC=$?" >>testtrygrep + echo "---------------------------- Test U11 ------------------------------" >>testtrygrep + printf '................................................' | tr '.' '\200' >testtemp1grep + printf 'x\n' >>testtemp1grep + $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk -o '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "only-matching RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk -M '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "multiline RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep --no-jit --buffer-size=16 -U --allow-lookaround-bsk --colour=always '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "colour RC=$?" >>testtrygrep + + echo "---------------------------- Test U12 ------------------------------" >>testtrygrep + # Colouring only, so the subject is a single line. An empty match at the end + # of the subject, then one that matches before retrying at the end. + printf 'abc\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -u '$' testtemp1grep >>testtrygrep 2>&1 + echo "colour-empty-at-end RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1 + echo "colour-nonempty-then-empty RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n --colour=always -u '^' testtemp1grep >>testtrygrep 2>&1 + echo "colour-empty-at-start RC=$?" >>testtrygrep + + # An empty line, so the first match is empty with nothing following it, and a + # final line with no newline, so a restart can reach the end of the line. + printf '\nabc\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1 + echo "colour-empty-line RC=$?" >>testtrygrep + printf 'abc' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -u '.?' testtemp1grep >>testtrygrep 2>&1 + echo "colour-no-final-newline RC=$?" >>testtrygrep + + # Multiline, where a restart may have to move on to a following line. + printf 'a\nb\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -M -u '$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-empty-at-line-end RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -u '^' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-empty-at-line-start RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -u '.?' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-nonempty-then-empty RC=$?" >>testtrygrep + + # A match that spans several lines, so that the restart has to skip over more + # than one line before looking for the next match. + printf 'a\nb\nc\nd\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -M -u '(?s)a.*c' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-spanning RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -u '(?s)a.*c|$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-spanning-then-empty RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M --colour=always -u '(?s)a.*c|$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-colour-spanning RC=$?" >>testtrygrep + + # Invalid UTF-8 after an empty match, which is when the scan over + # continuation bytes that follow the restart point can run. Here the scan + # stops at the start of the next character. + printf 'x\200\200y\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "colour-utf-scan-to-char RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-scan-to-char RC=$?" >>testtrygrep + + # The continuation bytes run up to the newline, and then up to the end of the + # subject, when there is no newline to stop the scan. + printf 'x\200\200\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "colour-utf-scan-to-newline RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-scan-to-newline RC=$?" >>testtrygrep + printf 'x\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "colour-utf-scan-to-end RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -U '^' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-scan-to-end RC=$?" >>testtrygrep + + # A subject that is nothing but continuation bytes, so the very first match + # is empty and the scan immediately reaches the end. + printf '\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -U '.?' testtemp1grep >>testtrygrep 2>&1 + echo "colour-utf-only-continuations RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -U '.?' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-only-continuations RC=$?" >>testtrygrep + + # Continuation bytes at the end of a multi-line subject, reached after an + # empty match on an earlier line, and after a match that spans lines. + printf 'a\nb\n\n\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep -n -M -U '.?' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-trailing RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M -U '$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-utf-trailing-empty RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -M --colour=always -U '(?s)a.*b|$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-colour-utf-trailing-spanning RC=$?" >>testtrygrep + + echo "---------------------------- Test U13 ------------------------------" >>testtrygrep + # The same restart, but reached by \K rather than by an empty match. + printf 'abc\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n --colour=always -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "colour-bsk RC=$?" >>testtrygrep + printf 'a\nb\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -M -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-bsk RC=$?" >>testtrygrep + + # The same, but with the restart landing on invalid UTF-8. + printf 'x\200\200y\n' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n --colour=always -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "colour-bsk-utf-scan-to-char RC=$?" >>testtrygrep + printf 'x\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n -M -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-bsk-utf-scan-to-end RC=$?" >>testtrygrep + printf 'a\nx\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n -M --colour=always -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-colour-bsk-utf-trailing RC=$?" >>testtrygrep + + + echo "---------------------------- Test U14 ------------------------------" >>testtrygrep + + # A pattern that keeps making progress, so the restart is the ordinary one + # and the line is never advanced. This is the path the other U14 tests build on. + printf 'abcabc\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -o -u 'a.' testtemp1grep >>testtrygrep 2>&1 + echo "control-progress RC=$?" >>testtrygrep + + # An empty match, which is the case the restart exists for. "$" matches only + # at the end of the subject, so the restart is immediately at the end; "^" + # matches at the start, so it has to step forward by one character first. + $valgrind $vjs $pcre2grep -n -o -u '$' testtemp1grep >>testtrygrep 2>&1 + echo "empty-at-end RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -o -u '^' testtemp1grep >>testtrygrep 2>&1 + echo "empty-at-start RC=$?" >>testtrygrep + + # \K in a lookbehind reports a non-empty match that ends no later than the + # offset it was started from. PCRE2_NOTEMPTY is set once a match has been + # found, so this, unlike an empty match, can stop the loop making progress on + # every iteration and not just the first. + $valgrind $vjs $pcre2grep -n -o -u --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "bsk-restart RC=$?" >>testtrygrep + + # The step forward lands on invalid UTF-8, so the scan over continuation + # bytes runs. Here it stops at the start of the next character, and then at + # the newline, both of which are within the subject. + printf 'x\200\200y\n' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "bsk-utf-scan-to-char RC=$?" >>testtrygrep + printf 'x\200\200\n' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "bsk-utf-scan-to-newline RC=$?" >>testtrygrep + + # The same, but with no newline to stop the scan, so it runs to the end of + # the subject and then looks at the byte after it. + printf 'x\200\200' >testtemp1grep + $valgrind $vjs $pcre2grep --no-jit -n -o -U --allow-lookaround-bsk '(?<=\K.)' testtemp1grep >>testtrygrep 2>&1 + echo "bsk-utf-scan-to-end RC=$?" >>testtrygrep + + # Moving on to another line, which only happens in multiline mode. The first + # match ends exactly at the start of the next line, so the line is advanced + # and the line number with it; the second ends two lines further on. + printf 'ab\ncd\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -o -M -u 'ab\n' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-line-boundary RC=$?" >>testtrygrep + printf 'ab\ncd\nef\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -o -M -u '(?s)ab.*ef' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-spanning RC=$?" >>testtrygrep + + # An empty match in multiline mode, where the step forward is what takes the + # restart past the end of the line. + printf 'a\nb\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -o -M -u '$' testtemp1grep >>testtrygrep 2>&1 + echo "multiline-empty RC=$?" >>testtrygrep + + # A match that ends between the CR and the LF of a CRLF line ending, so the + # restart is past the text of the line but short of the start of the next + # one. Without -M the line is never advanced, so that is the control. + printf 'ab\r\ncd\r\n' >testtemp1grep + $valgrind $vjs $pcre2grep -n -o -N CRLF '\r' testtemp1grep >>testtrygrep 2>&1 + echo "crlf-not-multiline RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -o -M -N CRLF '\r' testtemp1grep >>testtrygrep 2>&1 + echo "crlf-mid-terminator RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -n -o -M -N ANY '\r' testtemp1grep >>testtrygrep 2>&1 + echo "any-mid-terminator RC=$?" >>testtrygrep + $valgrind $vjs $pcre2grep -M -N CRLF --line-offsets '\r' testtemp1grep >>testtrygrep 2>&1 + echo "crlf-mid-terminator-line-offsets RC=$?" >>testtrygrep + $cf $srcdir/testdata/grepoutput8 testtrygrep if [ $? != 0 ] ; then exit 1; fi @@ -1159,6 +1359,7 @@ checkspecial "-e (unpaired1 -e (unpaired2 /dev/null" 2 # Clean up local working files rm -f testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep +rm -f ./-testtemp1grep ./-- exit 0 diff --git a/RunGrepTest.bat b/RunGrepTest.bat index 3c918e3..38eeabe 100644 --- a/RunGrepTest.bat +++ b/RunGrepTest.bat @@ -81,16 +81,32 @@ if NOT "%nl%" == "LF" if NOT "%nl%" == "ANY" if NOT "%nl%" == "ANYCRLF" ( echo Default newline setting forced to LF ) -:: Create a simple printf via cscript/JScript (an actual printf may translate -:: LF to CRLF, which this one does not). We only support the barebones we need: -:: \r, \n, \0, and %s (but only once). +:: Provide "printf" and "tr" via pcre2test. Windows has no dependable version +:: of either: the obvious candidates translate what they write according to the +:: current code page, which mangles any byte greater than 0x7f, and an actual +:: printf may turn LF into CRLF. pcre2test has undocumented options that do just +:: as much as these tests need, so that this script can produce exactly the same +:: bytes as RunGrepTest does with the real printf and tr. +:: +:: %printf% supports \r, \n, \\, an octal escape such as \0 or \200, and one +:: %%s substitution; any other escape is left alone, so a literal backslash +:: has to be written as \\. %tr% changes one byte value into another as it +:: copies its input. -echo WScript.StdOut.Write(WScript.Arguments(0).replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\0/g, "\x00").replace(/%%s/g, function() { return WScript.Arguments(1) })) >printf.js -set printf=cscript //nologo printf.js +set printf=%pcre2test% -printf +set tr=%pcre2test% -tr -:: Create a simple 'tr' via cscript/JScript. -echo WScript.StdOut.Write(WScript.StdIn.ReadAll().replace(/\x00/g, "@")) >trnull.js -set trnull=cscript //nologo trnull.js +:: pcre2grep ends the lines it writes with CRLF on Windows and with LF +:: elsewhere, which comparison copes with, but a line whose own text ends with +:: CR then comes out with one CR too many. %fixcrlf% removes it, for tests that +:: match a CR at the end of a line. + +set fixcrlf=%pcre2test% -fixcrlf + +:: The script callout tests run printf as a callout, where the program name +:: cannot be quoted, so keep an unquoted version of the path for them. + +set pcre2test_unquoted=%pcre2test:"=% :: ------ Normal tests ------ @@ -707,11 +723,11 @@ echo ---------------------------- Test 134 ----------------------------->>testtr echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test 135 ----------------------------->>testtrygrep -(pushd %srcdir% & %pcre2grep% -HZ "word" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep +(pushd %srcdir% & %pcre2grep% -HZ "word" ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep -(pushd %srcdir% & %pcre2grep% -lZ "word" ./testdata/grepinputv ./testdata/grepinputv & popd) | %trnull% >>testtrygrep +(pushd %srcdir% & %pcre2grep% -lZ "word" ./testdata/grepinputv ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep -(pushd %srcdir% & %pcre2grep% -A 1 -B 1 -HZ "word" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep +(pushd %srcdir% & %pcre2grep% -A 1 -B 1 -HZ "word" ./testdata/grepinputv & popd) | %tr% \0 @ >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep (pushd %srcdir% & %pcre2grep% -MHZn "start[\s]+end" testdata/grepinputM & popd) >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep @@ -741,7 +757,7 @@ echo ---------------------------- Test 140 ----------------------------->>testtr echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test 141 ----------------------------->>testtrygrep -%printf% "%%s\testdata\grepinputv\n-\n" "%srcdir%" >testtemp1grep +%printf% "%%s\\testdata\\grepinputv\n-\n" "%srcdir%" >testtemp1grep %printf% "This is a line from stdin." >testtemp2grep %pcre2grep% --file-list testtemp1grep "line from stdin" >testtrygrep 2>&1 echo RC=^%ERRORLEVEL%>>testtrygrep @@ -778,6 +794,17 @@ echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test 147 ----------------------------->>testtrygrep %pcre2grep% -e "123|fox" -- -nonfile >>testtrygrep 2>&1 echo RC=^%ERRORLEVEL%>>testtrygrep +%printf% "A123B" >testtemp1grep +%printf% "C123D" >.\-testtemp1grep +%pcre2grep% "123" -- -testtemp1grep >>testtrygrep 2>&1 +echo RC=^%ERRORLEVEL%>>testtrygrep +%pcre2grep% "123" testtemp1grep -- -testtemp1grep >>testtrygrep 2>&1 +echo RC=^%ERRORLEVEL%>>testtrygrep +%pcre2grep% "123" -- >testtrygrep 2>&1 +echo RC=^%ERRORLEVEL%>>testtrygrep +%printf% "E123F" >.\-- +%pcre2grep% -- "123" -- >>testtrygrep 2>&1 +echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test 148 ----------------------------->>testtrygrep %pcre2grep% --nonexist >>testtrygrep 2>&1 @@ -870,6 +897,17 @@ echo RC=^%ERRORLEVEL%>>testtrygrep (pushd %srcdir% & %pcre2grep% -n -B4 -A2 "^(ert|dfg)" ./testdata/grepinput & popd) >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep +echo ---------------------------- Test 161 ----------------------------->>testtrygrep +%printf% "XfooY\n" >testNinputgrep +%pcre2grep% --allow-lookaround-bsk -o "(?=foo\K)" testNinputgrep >>testtrygrep +echo RC=^%ERRORLEVEL%>>testtrygrep +%pcre2grep% --allow-lookaround-bsk --output "$0" "(?=foo\K)" testNinputgrep >>testtrygrep +echo RC=^%ERRORLEVEL%>>testtrygrep +%pcre2grep% --allow-lookaround-bsk --line-offsets "(?=foo\K)" testNinputgrep >>testtrygrep +echo RC=^%ERRORLEVEL%>>testtrygrep +%pcre2grep% --allow-lookaround-bsk --file-offsets "(?=foo\K)" testNinputgrep >>testtrygrep +echo RC=^%ERRORLEVEL%>>testtrygrep + :: Now compare the results. %cf% %srcdir%\testdata\grepoutput testtrygrep %cfout% @@ -921,6 +959,190 @@ if %utf8% neq 0 ( (pushd %srcdir% & %pcre2grep% -u --posix-digit --colour=always "A\d" ./testdata/grepinput8 & popd) >>testtrygrep echo RC=^!ERRORLEVEL!>>testtrygrep + echo ---------------------------- Test U11 ------------------------------>>testtrygrep + %printf% "................................................" | %tr% . \200 >testtemp1grep + %printf% "x\n" >>testtemp1grep + %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk -o "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo only-matching RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk -M "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo multiline RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% --no-jit --buffer-size=16 -U --allow-lookaround-bsk --colour=always "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo colour RC=^!ERRORLEVEL!>>testtrygrep + + echo ---------------------------- Test U12 ------------------------------>>testtrygrep + @REM Colouring only, so the subject is a single line. An empty match at the end + @REM of the subject, then one that matches before retrying at the end. + %printf% "abc\n" >testtemp1grep + %pcre2grep% -n --colour=always -u "$" testtemp1grep >>testtrygrep 2>&1 + echo colour-empty-at-end RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1 + echo colour-nonempty-then-empty RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n --colour=always -u "^" testtemp1grep >>testtrygrep 2>&1 + echo colour-empty-at-start RC=^!ERRORLEVEL!>>testtrygrep + + @REM An empty line, so the first match is empty with nothing following it, and a + @REM final line with no newline, so a restart can reach the end of the line. + %printf% "\nabc\n" >testtemp1grep + %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1 + echo colour-empty-line RC=^!ERRORLEVEL!>>testtrygrep + %printf% "abc" >testtemp1grep + %pcre2grep% -n --colour=always -u ".?" testtemp1grep >>testtrygrep 2>&1 + echo colour-no-final-newline RC=^!ERRORLEVEL!>>testtrygrep + + @REM Multiline, where a restart may have to move on to a following line. + %printf% "a\nb\n" >testtemp1grep + %pcre2grep% -n -M -u "$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-empty-at-line-end RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -u "^" testtemp1grep >>testtrygrep 2>&1 + echo multiline-empty-at-line-start RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -u ".?" testtemp1grep >>testtrygrep 2>&1 + echo multiline-nonempty-then-empty RC=^!ERRORLEVEL!>>testtrygrep + + @REM A match that spans several lines, so that the restart has to skip over more + @REM than one line before looking for the next match. + %printf% "a\nb\nc\nd\n" >testtemp1grep + %pcre2grep% -n -M -u "(?s)a.*c" testtemp1grep >>testtrygrep 2>&1 + echo multiline-spanning RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -u "(?s)a.*c|$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-spanning-then-empty RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M --colour=always -u "(?s)a.*c|$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-colour-spanning RC=^!ERRORLEVEL!>>testtrygrep + + @REM Invalid UTF-8 after an empty match, which is when the scan over + @REM continuation bytes that follow the restart point can run. Here the scan + @REM stops at the start of the next character. + %printf% "x\200\200y\n" >testtemp1grep + %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1 + echo colour-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep + + @REM The continuation bytes run up to the newline, and then up to the end of the + @REM subject, when there is no newline to stop the scan. + %printf% "x\200\200\n" >testtemp1grep + %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1 + echo colour-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep + %printf% "x\200\200" >testtemp1grep + %pcre2grep% -n --colour=always -U "^" testtemp1grep >>testtrygrep 2>&1 + echo colour-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -U "^" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep + + @REM A subject that is nothing but continuation bytes, so the very first match + @REM is empty and the scan immediately reaches the end. + %printf% "\200\200" >testtemp1grep + %pcre2grep% -n --colour=always -U ".?" testtemp1grep >>testtrygrep 2>&1 + echo colour-utf-only-continuations RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -U ".?" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-only-continuations RC=^!ERRORLEVEL!>>testtrygrep + + @REM Continuation bytes at the end of a multi-line subject, reached after an + @REM empty match on an earlier line, and after a match that spans lines. + %printf% "a\nb\n\n\200\200" >testtemp1grep + %pcre2grep% -n -M -U ".?" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-trailing RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M -U "$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-utf-trailing-empty RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -M --colour=always -U "(?s)a.*b|$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-colour-utf-trailing-spanning RC=^!ERRORLEVEL!>>testtrygrep + + echo ---------------------------- Test U13 ------------------------------>>testtrygrep + @REM The same restart, but reached by \K rather than by an empty match. + %printf% "abc\n" >testtemp1grep + %pcre2grep% -n --colour=always -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo colour-bsk RC=^!ERRORLEVEL!>>testtrygrep + %printf% "a\nb\n" >testtemp1grep + %pcre2grep% -n -M -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo multiline-bsk RC=^!ERRORLEVEL!>>testtrygrep + + @REM The same, but with the restart landing on invalid UTF-8. + %printf% "x\200\200y\n" >testtemp1grep + %pcre2grep% --no-jit -n --colour=always -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo colour-bsk-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep + %printf% "x\200\200" >testtemp1grep + %pcre2grep% --no-jit -n -M -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo multiline-bsk-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep + %printf% "a\nx\200\200" >testtemp1grep + %pcre2grep% --no-jit -n -M --colour=always -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo multiline-colour-bsk-utf-trailing RC=^!ERRORLEVEL!>>testtrygrep + + echo ---------------------------- Test U14 ------------------------------>>testtrygrep + + @REM A pattern that keeps making progress, so the restart is the ordinary one + @REM and the line is never advanced. This is the path the other U14 tests build on. + %printf% "abcabc\n" >testtemp1grep + %pcre2grep% -n -o -u "a." testtemp1grep >>testtrygrep 2>&1 + echo control-progress RC=^!ERRORLEVEL!>>testtrygrep + + @REM An empty match, which is the case the restart exists for. "$" matches only + @REM at the end of the subject, so the restart is immediately at the end; "^" + @REM matches at the start, so it has to step forward by one character first. + %pcre2grep% -n -o -u "$" testtemp1grep >>testtrygrep 2>&1 + echo empty-at-end RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -o -u "^" testtemp1grep >>testtrygrep 2>&1 + echo empty-at-start RC=^!ERRORLEVEL!>>testtrygrep + + @REM \K in a lookbehind reports a non-empty match that ends no later than the + @REM offset it was started from. PCRE2_NOTEMPTY is set once a match has been + @REM found, so this, unlike an empty match, can stop the loop making progress on + @REM every iteration and not just the first. + %pcre2grep% -n -o -u --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo bsk-restart RC=^!ERRORLEVEL!>>testtrygrep + + @REM The step forward lands on invalid UTF-8, so the scan over continuation + @REM bytes runs. Here it stops at the start of the next character, and then at + @REM the newline, both of which are within the subject. + %printf% "x\200\200y\n" >testtemp1grep + %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo bsk-utf-scan-to-char RC=^!ERRORLEVEL!>>testtrygrep + %printf% "x\200\200\n" >testtemp1grep + %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo bsk-utf-scan-to-newline RC=^!ERRORLEVEL!>>testtrygrep + + @REM The same, but with no newline to stop the scan, so it runs to the end of + @REM the subject and then looks at the byte after it. + %printf% "x\200\200" >testtemp1grep + %pcre2grep% --no-jit -n -o -U --allow-lookaround-bsk "(?<=\K.)" testtemp1grep >>testtrygrep 2>&1 + echo bsk-utf-scan-to-end RC=^!ERRORLEVEL!>>testtrygrep + + @REM Moving on to another line, which only happens in multiline mode. The first + @REM match ends exactly at the start of the next line, so the line is advanced + @REM and the line number with it; the second ends two lines further on. + %printf% "ab\ncd\n" >testtemp1grep + %pcre2grep% -n -o -M -u "ab\n" testtemp1grep >>testtrygrep 2>&1 + echo multiline-line-boundary RC=^!ERRORLEVEL!>>testtrygrep + %printf% "ab\ncd\nef\n" >testtemp1grep + %pcre2grep% -n -o -M -u "(?s)ab.*ef" testtemp1grep >>testtrygrep 2>&1 + echo multiline-spanning RC=^!ERRORLEVEL!>>testtrygrep + + @REM An empty match in multiline mode, where the step forward is what takes the + @REM restart past the end of the line. + %printf% "a\nb\n" >testtemp1grep + %pcre2grep% -n -o -M -u "$" testtemp1grep >>testtrygrep 2>&1 + echo multiline-empty RC=^!ERRORLEVEL!>>testtrygrep + + @REM A match that ends between the CR and the LF of a CRLF line ending, so the + @REM restart is past the text of the line but short of the start of the next + @REM one. Without -M the line is never advanced, so that is the control. + @REM These match a CR at the end of a line, which pcre2grep then follows with + @REM STDOUT_NL, so the CR has to be unpicked from the line ending to match + @REM what RunGrepTest produces. See the -fixcrlf helper in pcre2test. + %printf% "ab\r\ncd\r\n" >testtemp1grep + %pcre2grep% -n -o -N CRLF "\r" testtemp1grep >>testtrygrep 2>&1 + echo crlf-not-multiline RC=^!ERRORLEVEL!>>testtrygrep + %pcre2grep% -n -o -M -N CRLF "\r" testtemp1grep >testtemp2grep 2>&1 + set rc=^!ERRORLEVEL! + %fixcrlf% >testtrygrep + echo crlf-mid-terminator RC=^!rc!>>testtrygrep + %pcre2grep% -n -o -M -N ANY "\r" testtemp1grep >testtemp2grep 2>&1 + set rc=^!ERRORLEVEL! + %fixcrlf% >testtrygrep + echo any-mid-terminator RC=^!rc!>>testtrygrep + %pcre2grep% -M -N CRLF --line-offsets "\r" testtemp1grep >>testtrygrep 2>&1 + echo crlf-mid-terminator-line-offsets RC=^!ERRORLEVEL!>>testtrygrep + %cf% %srcdir%\testdata\grepoutput8 testtrygrep %cfout% if ERRORLEVEL 1 exit /b 1 @@ -951,7 +1173,11 @@ echo RC=^%ERRORLEVEL%>>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test N3 ------------------------------>>testtrygrep -for /f %%a in ('%printf% "def\rjkl"') do set pattern=%%a +@REM The pattern contains a CR, which for /f keeps, but the command has to be +@REM read from a file: %printf% starts with a quoted path, and cmd mangles the +@REM quoting of a command given directly to for /f. +%printf% "def\rjkl" >testtemp1grep +for /f %%a in (testtemp1grep) do set pattern=%%a %pcre2grep% -n --newline=cr -F "!pattern!" testNinputgrep >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep @@ -973,9 +1199,9 @@ echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test N7 ------------------------------>>testtrygrep %printf% "xyz\0abc\0def" >testNinputgrep -%pcre2grep% -na --newline=nul "^(abc|def)" testNinputgrep | %trnull% >>testtrygrep +%pcre2grep% -na --newline=nul "^(abc|def)" testNinputgrep | %tr% \0 @ >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep -%pcre2grep% -B1 -na --newline=nul "^(abc|def)" testNinputgrep | %trnull% >>testtrygrep +%pcre2grep% -B1 -na --newline=nul "^(abc|def)" testNinputgrep | %tr% \0 @ >>testtrygrep echo RC=^%ERRORLEVEL%>>testtrygrep echo ---------------------------- Test N8 ------------------------------>>testtrygrep @@ -1030,7 +1256,7 @@ if %ERRORLEVEL% equ 0 ( %pcre2grep% "(T)(?C'|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep echo RC=^!ERRORLEVEL!>>testtrygrep echo --- Test 4 --->>testtrygrep - %pcre2grep% "(T)(?C'cscript|//nologo|printf.js|%%s\r\n|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep + %pcre2grep% "(T)(?C'%pcre2test_unquoted%|-printf|%%s\r\n|$0:$1$n')" %srcdir%\testdata\grepinputv >>testtrygrep echo RC=^!ERRORLEVEL!>>testtrygrep echo --- Test 5 --->>testtrygrep %pcre2grep% "(T)(?C'|$1$n')(*F)" %srcdir%\testdata\grepinputv >>testtrygrep @@ -1058,7 +1284,7 @@ if %ERRORLEVEL% equ 0 ( %pcre2grep% -u "(T)(?C'|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep echo RC=^!ERRORLEVEL!>>testtrygrep echo --- Test 2 --->>testtrygrep - %pcre2grep% -u "(T)(?C'cscript|//nologo|printf.js|%%s\r\n|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep + %pcre2grep% -u "(T)(?C'%pcre2test_unquoted%|-printf|%%s\r\n|$0:$x{a6}$n')" %srcdir%\testdata\grepinputv >>testtrygrep echo RC=^!ERRORLEVEL!>>testtrygrep if ^!nonfork! equ 1 ( @@ -1095,7 +1321,7 @@ call :checkspecial "-e (unpaired1 -e (unpaired2 nul" 2 || exit /b 1 :: Clean up local working files -del testcf printf.js trnull.js testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep +del testcf testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep -testtemp1grep -- exit /b 0 diff --git a/RunTest b/RunTest index 57a0345..306427b 100755 --- a/RunTest +++ b/RunTest @@ -175,9 +175,12 @@ checkresult() *) with="";; esac cf_out="$testdata/testoutput$2" - if [ $ebcdic -eq 1 ] ; then - # We currently only use the #if ... #endif support in pcre2test for EBCDIC - # testing. Run in "preprocess-only" mode (-E) on the testoutput file to trim + if [ $ebcdic -eq 1 ] || [ $utf -eq 0 ]; then + # We currently only use the #if ... #endif support in pcre2test for tests + # which are excluded in certain builds: + # - EBCDIC + # - No-UTF + # Run in "preprocess-only" mode (-E) on the testoutput file to trim # the output lines matching the input lines which are discarded. $sim $pcre2test -q -E "$cf_out" >testoutput$bits$3/testoutput$2-expected cf_out=testoutput$bits$3/testoutput$2-expected diff --git a/SECURITY.md b/SECURITY.md index a9cd7c1..4bbe5cd 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -22,11 +22,12 @@ Git checkout of the (GPG-signed) release tag. Please contact the maintainers for any queries about release integrity or the project's supply-chain. -Previous vulnerabilities ------------------------- +Support lifecycle +----------------- -* CVE-2025-58050 (August 2025). Affects 10.45 only (not earlier), and is fixed - in 10.46. +See the documentation under [SUPPORT-LIFECYCLE](./SUPPORT-LIFECYCLE.md) for +details on how to distribute versions of PCRE2 older than the latest, with +backported security and high-severity bug fixes. Reporting vulnerabilities ------------------------- @@ -47,8 +48,7 @@ aim to respond within 1 week, or perhaps 2 during holidays. ### Response procedure -PCRE2 has in the past made at least one rapid release in response to -security incidents. +PCRE2 has in the past made rapid releases in response to security incidents. We have never produced an embargoed release, or provided preferential access to security fixes to any clients. @@ -57,3 +57,25 @@ We would aim to notify security managers from trusted downstream distributors, such as major Linux distributions, via the `pcre2-dev` mailing list, by publicly signalling an upcoming security release before disclosing the vulnerability publicly, where advance notification is possible. + +Previous vulnerabilities +------------------------ + +* CVE-2025-58050 (August 2025). Affects 10.45 only (not earlier), and is fixed + in 10.46. +* CVE-2022-41409 (July 2023). Only affects test code; no expected impact. Fixed + in 10.41. +* CVE-2022-1587 and CVE-2022-1586 (May 2020). Affect versions before 10.40, and + fixed in 10.40. +* CVE-2019-20454 (February 2020). Affects versions 10.31 to 10.33, and is fixed + in 10.34. +* CVE-2017-8786 (May 2017). Only affects test code. Fixed in 10.30. +* CVE-2017-8399 (May 2017). High severity. Fixed in 10.30. +* CVE-2017-7186 (March 2017). Fixed in 10.30. +* CVE-2016-3191 (March 2016). High severity. Fixed in 10.22. +* CVE-2015-8381, CVE-2015-3217 and CVE-2015-3210 (December 2015). High severity. + Fixed in 10.20. + +Common Platform Enumeration (CPE) names: +* CPE name version 2.3: `cpe:2.3:a:pcre:pcre2:-:*:*:*:*:*:*:*` +* CPE name version 2.2: `cpe:/a:pcre:pcre2:-` diff --git a/SUPPORT-LIFECYCLE.md b/SUPPORT-LIFECYCLE.md new file mode 100644 index 0000000..7d067b0 --- /dev/null +++ b/SUPPORT-LIFECYCLE.md @@ -0,0 +1,262 @@ +# PCRE2 Support Lifecycle + +This document outlines the support lifecycle policy for PCRE2 releases. It is +intended to provide clear guidance to distributors on the supported versions of +PCRE2, and the actions required to distribute older versions of PCRE2 securely. + +## Release policy + +PCRE2 releases follow a rolling version policy. There is one linear history of +releases, with each new release providing a mixture of enhancements and fixes to +the previous release. + +PCRE2 is designed to have a high level of backwards-compatibility and stability. +Where possible, we recommend that consumers of the library update to the latest +version. + +However, we recognise that Linux distributions in particular bundle older +versions for many years. To enable this practice, this document provides advice +on how to package and distribute older releases of PCRE2. + +This document will be updated with each new PCRE2 release to reflect the current +support status and any new lifecycle recommendations. + +## Actions for PCRE2 distributors and packagers + +* Check this document on each release of PCRE2. +* Each version of PCRE2 that you are supporting should be listed here. +* Check for any changes in the "patches to apply" section, and consider + backporting these. + +## Support Policy + +1. Each PCRE2 version will be supported for at least 5 years from its release + date. +2. Selected releases older than 5 years may continue to receive support if they + are actively distributed. +3. For supported versions, security and high-severity bug fixes will be + backported and listed in this document. + +The following distributions have been considered to determine support +requirements: + +- RHEL/CentOS/Fedora: Long lifecycle. Although it's listed at 10+ years, there + is effectively a freeze after five years of "Full Support", with presumably only + CVE fixes being backported after that during "Maintenance Support". + + Packages: https://src.fedoraproject.org/rpms/pcre2 + + Packages: https://gitlab.com/redhat/centos-stream/rpms/pcre2 + +- Debian: Five year lifecycle. There is a three-year period of full support. In + practice, backports to "oldoldstable" releases are made only if absolutely + required, such as a CVE that requires fixing for compliance reasons. The + "stable" and "oldstable" releases actively accumulate backported fixes. + + Packages: https://tracker.debian.org/pkg/pcre2 + +- Ubuntu: Five year LTS. I believe most customers update fairly promptly every + two years, and few if any non-security backports are made to LTS releases + older than the current one. + + Packages: https://code.launchpad.net/ubuntu/+source/pcre2 + +- Alpine: Two year lifecycle. + + Packages: https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/main/pcre2?ref_type=heads + +- SUSE: Extremely long lifecycle; PCRE2 will stop backporting fixes long before + SUSE drops support. + + Packages: https://build.opensuse.org/package/show/openSUSE:Factory/pcre2 + +- Arch: Rolling release. No need for backports. However, it is a major upstream + packaging source for the Arch-based ecosystem. + + Packages: https://gitlab.archlinux.org/archlinux/packaging/packages/pcre2 + +- Other notable primary packaging sources include: + * Gentoo + + https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-libs/libpcre2 + + * NixOS + + https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/pcre2/default.nix + +Please contact us if you would like the PCRE2 maintainers to be aware of your +packages, particularly if you are a distributor of PCRE2, and provide a support +lifecycle for old (not-latest) PCRE2 releases. + +## Supported Versions + +Below is the list of supported PCRE2 versions. For each version, specific +recommendations and backported fixes (if any) are provided. + +### PCRE2 10.32 10-September-2018 + +* Shipped in RHEL/CentOS 8 (EOL 31 May 2024). + +This version is older than 5 years, but remains listed in SUPPORT-LIFECYCLE.md +potentially until May 2029 (end of "Maintenance Support" for RHEL 8), in +recognition that customer workloads may be using this version until then. + +I am not providing a recommendation of what patches to apply. Distributors still +shipping this release have likely frozen their codebase at this point. + +For the record, RHEL 8 used the following sets of patches: +https://src.fedoraproject.org/rpms/pcre2/tree/f28, +https://gitlab.com/redhat/centos-stream/rpms/pcre2/-/tree/c8s?ref_type=heads + +The most serious of these was the backported mitigation for CVE-2019-20454 from +the fix in 10.34. + +### PCRE2 10.36 04-December-2020 + +* Shipped in Debian 11 "Bullseye" (EOL 31 Aug 2026). + +I am not providing a recommendation of what patches to apply. Distributors still +shipping this release have likely frozen their codebase at this point, since the +release of Debian 12. + +### PCRE2 10.37 26-May-2021 + +I am not providing a recommendation of what patches to apply. I am not aware of +any Linux distributions providing extended support for 10.37. I have not tested +this release with any backported fixes applied. + +Patches introduced: +* `patches/pcre2-10.37-Remove-real-POSIX.patch`: To be backported to older + versions as required. This changes a behaviour which has been present since + the beginning of PCRE2's libpcre2posix.so, although the behaviour was updated + in 10.33. Versions prior to 10.33 cannot benefit from the backport; versions + 10.33-10.36 may use the backport at the distributor's discretion (that is, if + users have requested it; but it is not needed otherwise). + +### PCRE2 10.38 01-October-2021 + +Do not use (update to 10.39). + +### PCRE2 10.39 29-October-2021 + +* Shipped in Ubuntu 22.04 "Jammy Jellyfish" (EOL 01 Apr 2027). + +I am not providing a recommendation of what patches to apply. Distributors still +shipping this release have likely frozen their codebase at this point, since the +release of Ubuntu 24.04. + +Patches introduced: +* `patches/pcre2-10.39-Fix-incorrect-detection.patch`: Significant bugfix for + JIT matching + +### PCRE2 10.40 15-April-2022 + +* Shipped in RHEL/CentOS 9 (EOL 31 May 2027). + +I am not providing a recommendation of what patches to apply. Distributors still +shipping this release have likely frozen their codebase at this point, since the +release of RHEL 10. + +For the record, RHEL/CentOS 9 ships rather more backported patches than other +distributions: +https://gitlab.com/redhat/centos-stream/rpms/pcre2/-/tree/c9s?ref_type=heads + +Some of these patches may be relevant to other distributions, but I have not +tested them myself for compatibility with 10.40 or other earlier releases. + +Patches introduced: +* `patches/pcre2-10.40-A-Fixed-a-unicode.patch`: Fixed CVE-2022-1586. This + affects all recent previous versions of PCRE2. +* `patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch`: Fixed CVE-2022-1587. + This affects all recent previous versions of PCRE2. + +### PCRE2 10.41 06-December-2022 + +Do not use (update to 10.42). + +Introduced the fix for CVE-2022-41409. This only affects the pcre2test runner +for the test suite, so this fix is not backported. + +### PCRE2 10.42 11-December-2022 + +* Shipped in Debian 12 "Bookworm" (EOL 30 Jun 2028). +* Shipped in Ubuntu 24.04 "Noble Numbat" (EOL 25 Apr 2029). + +Users on RISC-V are advised to update to 10.43, or not use the JIT unless using +a backport for https://github.com/zherczeg/sljit/pull/223. Given the small +RISC-V userbase (especially on older releases), disabling the JIT for RISC-V +builds is likely acceptable. + +Patches to apply: +* `patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch` +* `patches/pcre2-10.43-Fix-heapframe-overflow.patch` + +### PCRE2 10.43 16-February-2024 + +* Shipped in Alpine 3.20 (EOL 01 Apr 2026) +* Shipped in Alpine 3.21 (EOL 01 Nov 2026) + +Patches to apply: +* `patches/pcre2-10.44-Fix-locking-region.patch` +* `patches/pcre2-10.44-Fix-incorrect-compiling.patch` + +Patches introduced: +* `patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch`: Fix integer overflow in + handling of LIMIT_HEAP. This is not a critical fix for backporting, and in + 10.41, the code for handling the heapframes changed to always using a + heap-allocated frames vector. This patch is therefore recommended for + backporting to 10.42 only. +* `patches/pcre2-10.43-Fix-heapframe-overflow.patch`: Fix buffer overrun in + handling of LIMIT_HEAP. These patches can be backported to all recent previous + versions (since LIMIT_HEAP was introduced in 10.30). + +### PCRE2 10.44 07-June-2024 + +* Shipped in RHEL/CentOS 10 (EOL 31 May 2030). + +Patches to apply: +* `patches/pcre2-10.45-Memory-reports-only-compiled.patch` + +Patches introduced: +* `patches/pcre2-10.44-Fix-locking-region.patch`: To be backported to 10.43 only + (bug introduced in 10.43). Crashes in multithreaded applications using the PCRE2 + JIT were likely in 10.43 without this patch. +* `patches/pcre2-10.44-Fix-incorrect-compiling.patch`: Fixes a bug causing + incorrect compilation of certain patterns which could crashes, for backporting + to 10.43. Because 10.42 and earlier required fixed-length lookbehinds, the + patch does not require backporting to earlier versions. + +### PCRE2 10.45 05-February-2025 + +Do not use (update to 10.46, which is is a drop-in compatible release with a +security fix). + +Patches introduced: +* `patches/pcre2-10.45-Memory-reports-only-compiled.patch`: To be backported to + 10.44 only. This is a test-only fix, so is not important to backport unless + test suite failures are observed. + +### PCRE2 10.46 27-August-2025 + +* Shipped in Debian 13 "Trixie" (EOL 30 Jun 2030). +* Shipped in Alpine 3.22 (EOL 01 May 2027) + +Introduced the fix for CVE-2025-58050. This only affects 10.45. Do not backport +the patch (just update to 10.46). + +Patches to apply: +* `patches/pcre2-10.47-Fix-for-callback.patch` + +### PCRE2 10.47 21-October-2025 + +Patches introduced: +* `patches/pcre2-10.47-Fix-for-callback.patch`: A fix for a significant memory + read overrun in a function rarely called by applications, to be backported to + 10.45 and 10.46 only (bug introduced in 10.45). +* There is a new and rewritten JIT implementation for the AArch64 SIMD code, + fixing crashes and out-of-bounds memory reads in the previous, legacy AArch64 + JIT. This is probably not possible to backport. + +### PCRE2 10.48 27-August-2026 + +**To be confirmed.** diff --git a/aclocal.m4 b/aclocal.m4 index ea61c79..e8154a9 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1588,12 +1588,12 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR -m4_include([m4/ax_check_vscript.m4]) m4_include([m4/ax_pthread.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) +m4_include([m4/pcre2_check_vscript.m4]) m4_include([m4/pcre2_visibility.m4]) m4_include([m4/pcre2_zos.m4]) diff --git a/build.zig b/build.zig index 960137a..61a13f2 100644 --- a/build.zig +++ b/build.zig @@ -7,77 +7,141 @@ pub const CodeUnitWidth = enum { }; pub fn build(b: *std.Build) !void { - const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); - const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (target.result.isGnuLibC()) .dynamic else .static); - const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8"; - const jit = b.option(bool, "support_jit", "Enable/disable JIT compiler support") orelse false; - - const pcre2_header_dir = b.addWriteFiles(); - const pcre2_header = pcre2_header_dir.addCopyFile(b.path("src/pcre2.h.generic"), "pcre2.h"); + const target = b.standardTargetOptions(.{}); + const rt = target.result; - const config_header = b.addConfigHeader( + const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (rt.isGnuLibC()) .dynamic else .static); + const sanitize_c = b.option(std.zig.SanitizeC, "sanitize_c", "whether to build with undefined behaviour sanitizer enabled") orelse .off; + const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8"; + const support_jit = b.option(bool, "support_jit", "Enable/disable JIT compiler support") orelse false; + + const sljit_is_checked_out = if (!support_jit) + false + else if (b.build_root.handle.access( + b.graph.io, + "deps/sljit/sljit_src/sljitLir.c", + .{}, + )) |_| true else |err| switch (err) { + error.FileNotFound => false, + else => return err, + }; + + // We don't know how the sljit dependency is being provided. Either it + // comes via a git submodule, or it may be fetched by zig itself. + const sljit_include_path = if (!support_jit) + null + else if (sljit_is_checked_out) + null + else blk: { + const sljit = b.lazyDependency("sljit", .{}) orelse + break :blk null; + + const files = b.addWriteFiles(); + + // Recreate the layout used by pcre2_jit_compile.c's relative include. + _ = files.addCopyDirectory( + sljit.path("sljit_src"), + "deps/sljit/sljit_src", + .{}, + ); + _ = files.add("src/.empty", ""); + + break :blk files.getDirectory().path(b, "src"); + }; + + const pcre2_h_dir = b.addWriteFiles(); + const pcre2_h = pcre2_h_dir.addCopyFile(b.path("src/pcre2.h.generic"), "pcre2.h"); + b.addNamedLazyPath("pcre2.h", pcre2_h); + + const is_unix = rt.os.tag != .windows; + const is_mingw = rt.isMinGW(); + const is_musl = rt.isMuslLibC(); + const is_glibc = rt.isGnuLibC(); + const is_freebsd = rt.isFreeBSDLibC(); + + const cflags = &.{ + "-fvisibility=hidden", + }; + + const config_h = b.addConfigHeader( .{ - .style = .{ .cmake = b.path("src/config-cmake.h.in") }, + .style = .{ + .cmake = b.path("src/config-cmake.h.in"), + }, .include_path = "config.h", }, + // These options should be kept in-sync with those in config-cmake.h.in, and + // should be the same set of options (no more needed). It is permitted to + // specify fewer options here than in config-cmake.h.in, if an option is + // disabled in all zig build configurations. .{ .HAVE_ASSERT_H = true, - .HAVE_UNISTD_H = (target.result.os.tag != .windows), - .HAVE_WINDOWS_H = (target.result.os.tag == .windows), - - .HAVE_ATTRIBUTE_UNINITIALIZED = true, + .HAVE_DIRENT_H = is_unix or is_mingw, + .HAVE_SYS_STAT_H = true, + .HAVE_SYS_TYPES_H = true, + .HAVE_UNISTD_H = is_unix or is_mingw, + .HAVE_WINDOWS_H = rt.os.tag == .windows, + + .HAVE_MEMFD_CREATE = is_musl or is_glibc or is_freebsd, + .HAVE_SECURE_GETENV = is_musl or is_glibc or is_freebsd, + .HAVE_SETRLIMIT = is_unix and !is_mingw, + + // all compilation is using the Zig bundled c compiler + .HAVE_BUILTIN_ASSUME = null, .HAVE_BUILTIN_MUL_OVERFLOW = true, .HAVE_BUILTIN_UNREACHABLE = true, + .HAVE_ATTRIBUTE_UNINITIALIZED = true, - .SUPPORT_PCRE2_8 = codeUnitWidth == CodeUnitWidth.@"8", - .SUPPORT_PCRE2_16 = codeUnitWidth == CodeUnitWidth.@"16", - .SUPPORT_PCRE2_32 = codeUnitWidth == CodeUnitWidth.@"32", + .SUPPORT_PCRE2_8 = codeUnitWidth == .@"8", + .SUPPORT_PCRE2_16 = codeUnitWidth == .@"16", + .SUPPORT_PCRE2_32 = codeUnitWidth == .@"32", .SUPPORT_UNICODE = true, - .SUPPORT_JIT = jit, + .SUPPORT_JIT = support_jit, + + // As for CMake builds, use visibilty attributes for both shared and static + // builds. Internal symbols should be hidden even in static builds, because + // the user could be statically linking PCRE2 into their own shared library. + .PCRE2_EXPORT = "__attribute__ ((visibility (\"default\")))", - .PCRE2_EXPORT = null, .PCRE2_LINK_SIZE = 2, + .PCRE2_PARENS_NEST_LIMIT = 250, .PCRE2_HEAP_LIMIT = 20000000, + .PCRE2_MAX_VARLOOKBEHIND = 255, .PCRE2_MATCH_LIMIT = 10000000, .PCRE2_MATCH_LIMIT_DEPTH = "MATCH_LIMIT", - .PCRE2_MAX_VARLOOKBEHIND = 255, - .NEWLINE_DEFAULT = 2, - .PCRE2_PARENS_NEST_LIMIT = 250, .PCRE2GREP_BUFSIZE = 20480, .PCRE2GREP_MAX_BUFSIZE = 1048576, + .NEWLINE_DEFAULT = 2, }, ); // pcre2-8/16/32 library - const lib_mod = b.createModule(.{ .target = target, .optimize = optimize, + .sanitize_c = sanitize_c, .link_libc = true, }); lib_mod.addCMacro("HAVE_CONFIG_H", ""); lib_mod.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth)); - if (linkage == .static) { - lib_mod.addCMacro("PCRE2_STATIC", ""); + switch (linkage) { + .static => lib_mod.addCMacro("PCRE2_STATIC", ""), + .dynamic => {}, + } + lib_mod.addConfigHeader(config_h); + lib_mod.addIncludePath(pcre2_h_dir.getDirectory()); + lib_mod.addIncludePath(b.path("src")); + if (sljit_include_path) |include_path| { + lib_mod.addIncludePath(include_path); } - const lib = b.addLibrary(.{ - .name = b.fmt("pcre2-{s}", .{@tagName(codeUnitWidth)}), - .root_module = lib_mod, - .linkage = linkage, - }); - - lib.addConfigHeader(config_header); - lib.addIncludePath(pcre2_header_dir.getDirectory()); - lib.addIncludePath(b.path("src")); - - lib.addCSourceFile(.{ + lib_mod.addCSourceFile(.{ .file = b.addWriteFiles().addCopyFile(b.path("src/pcre2_chartables.c.dist"), "pcre2_chartables.c"), + .flags = cflags, }); - - lib.addCSourceFiles(.{ + lib_mod.addCSourceFiles(.{ .files = &.{ "src/pcre2_auto_possess.c", "src/pcre2_chkdint.c", @@ -110,83 +174,95 @@ pub fn build(b: *std.Build) !void { "src/pcre2_valid_utf.c", "src/pcre2_xclass.c", }, + .flags = cflags, }); - lib.installHeader(pcre2_header, "pcre2.h"); + const lib = b.addLibrary(.{ + .name = b.fmt("pcre2-{t}", .{codeUnitWidth}), + .root_module = lib_mod, + .linkage = linkage, + }); + + lib.installHeader(pcre2_h, "pcre2.h"); b.installArtifact(lib); // pcre2test - const pcre2test_mod = b.createModule(.{ .target = target, .optimize = optimize, + .sanitize_c = sanitize_c, .link_libc = true, }); pcre2test_mod.addCMacro("HAVE_CONFIG_H", ""); - if (linkage == .static) { - pcre2test_mod.addCMacro("PCRE2_STATIC", ""); - } else { - pcre2test_mod.addCMacro("PCRE2POSIX_SHARED", ""); + + // Note: On Windows, consumers linking against the static library should + // probably define PCRE2_STATIC themselves (e.g. via + // addCMacro("PCRE2_STATIC", "")). + // As far as I know, Zig's build system does not currently have a mechanism + // to propagate compile definitions to downstream consumers (like CMake's + // PUBLIC target_compile_definitions). On non-Windows targets this is a no-op. + switch (linkage) { + .static => pcre2test_mod.addCMacro("PCRE2_STATIC", ""), + .dynamic => pcre2test_mod.addCMacro("PCRE2POSIX_SHARED", ""), } const pcre2test = b.addExecutable(.{ .name = "pcre2test", .root_module = pcre2test_mod, }); + pcre2test_mod.addConfigHeader(config_h); + pcre2test_mod.addIncludePath(pcre2_h_dir.getDirectory()); + pcre2test_mod.addIncludePath(b.path("src")); - // pcre2-posix library + pcre2test_mod.addCSourceFile(.{ + .file = b.path("src/pcre2test.c"), + .flags = cflags, + }); + pcre2test_mod.linkLibrary(lib); + b.installArtifact(pcre2test); + + // pcre2-posix library if (codeUnitWidth == CodeUnitWidth.@"8") { const posixLib_mod = b.createModule(.{ .target = target, .optimize = optimize, + .sanitize_c = sanitize_c, .link_libc = true, }); posixLib_mod.addCMacro("HAVE_CONFIG_H", ""); posixLib_mod.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth)); - if (linkage == .static) { - posixLib_mod.addCMacro("PCRE2_STATIC", ""); - } else { - posixLib_mod.addCMacro("PCRE2POSIX_SHARED", ""); - } - const posixLib = b.addLibrary(.{ - .name = "pcre2-posix", - .root_module = posixLib_mod, - .linkage = linkage, - }); + switch (linkage) { + .static => posixLib_mod.addCMacro("PCRE2_STATIC", ""), + .dynamic => posixLib_mod.addCMacro("PCRE2POSIX_SHARED", ""), + } - posixLib.addConfigHeader(config_header); - posixLib.addIncludePath(pcre2_header_dir.getDirectory()); - posixLib.addIncludePath(b.path("src")); + posixLib_mod.addConfigHeader(config_h); + posixLib_mod.addIncludePath(pcre2_h_dir.getDirectory()); + posixLib_mod.addIncludePath(b.path("src")); - posixLib.addCSourceFiles(.{ + posixLib_mod.addCSourceFiles(.{ .files = &.{ "src/pcre2posix.c", }, + .flags = cflags, + }); + + posixLib_mod.linkLibrary(lib); + + const posixLib = b.addLibrary(.{ + .name = "pcre2-posix", + .root_module = posixLib_mod, + .linkage = linkage, }); - posixLib.linkLibrary(lib); + pcre2test_mod.linkLibrary(posixLib); + b.addNamedLazyPath("pcre2posix.h", b.path("src/pcre2posix.h")); posixLib.installHeader(b.path("src/pcre2posix.h"), "pcre2posix.h"); b.installArtifact(posixLib); - - pcre2test.linkLibrary(posixLib); } - - // pcre2test (again) - - pcre2test.addConfigHeader(config_header); - pcre2test.addIncludePath(pcre2_header_dir.getDirectory()); - pcre2test.addIncludePath(b.path("src")); - - pcre2test.addCSourceFile(.{ - .file = b.path("src/pcre2test.c"), - }); - - pcre2test.linkLibrary(lib); - - b.installArtifact(pcre2test); } diff --git a/build.zig.zon b/build.zig.zon new file mode 100644 index 0000000..a977415 --- /dev/null +++ b/build.zig.zon @@ -0,0 +1,25 @@ +.{ + .name = .pcre2, + .version = "10.48.0-RC1", + + // Do NOT change this for new releases. + // DO change this if making a fork of PCRE2 which is used by any Zig clients. + .fingerprint = 0x914b3d63ebab9e21, + + .minimum_zig_version = "0.16.0", + .dependencies = .{ + .sljit = .{ + .url = "git+https://github.com/zherczeg/sljit.git#de0259c7aaf36aa40cba8014f3fad3edde9307f9", + .hash = "N-V-__8AAN1hRgCbYkMHlPE4yQE6rN_yDbzE1yr8W1J6x-Gw", + .lazy = true, + }, + }, + .paths = .{ + "build.zig", "build.zig.zon", + "src/", "doc/", + "deps/", "HACKING", + "INSTALL", "README.md", + "LICENCE.md", "AUTHORS.md", + "SECURITY.md", + }, +} diff --git a/cmake/FindEditline.cmake b/cmake/FindEditline.cmake index c973c7b..4784e05 100644 --- a/cmake/FindEditline.cmake +++ b/cmake/FindEditline.cmake @@ -8,3 +8,8 @@ mark_as_advanced(EDITLINE_LIBRARY) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Editline DEFAULT_MSG EDITLINE_LIBRARY EDITLINE_INCLUDE_DIR) + +if(Editline_FOUND) + set(EDITLINE_LIBRARIES "${EDITLINE_LIBRARY}") + set(EDITLINE_INCLUDE_DIRS "${EDITLINE_INCLUDE_DIR}") +endif() diff --git a/cmake/FindReadline.cmake b/cmake/FindReadline.cmake index 399096c..e55fbcf 100644 --- a/cmake/FindReadline.cmake +++ b/cmake/FindReadline.cmake @@ -16,6 +16,11 @@ if(READLINE_INCLUDE_DIR AND READLINE_LIBRARY) include(CheckSymbolExists) include(CMakePushCheckState) + set(first_run FALSE) + if(NOT DEFINED HAVE_READLINE_FUNC) + set(first_run TRUE) + endif() + cmake_push_check_state(RESET) set(CMAKE_REQUIRED_LIBRARIES "${READLINE_LIBRARY}") set(CMAKE_REQUIRED_INCLUDES "${READLINE_INCLUDE_DIR}") @@ -36,7 +41,9 @@ if(READLINE_INCLUDE_DIR AND READLINE_LIBRARY) check_symbol_exists("readline" "stdio.h;readline/readline.h" HAVE_READLINE_FUNC_${lib}) if(HAVE_READLINE_FUNC_${lib}) - message(STATUS "Looking for readline - readline needs ${lib}") + if(first_run) + message(STATUS "Looking for readline - readline needs ${lib}") + endif() set(NCURSES_LIBRARY "${NCURSES_LIBRARY_${lib}}" CACHE FILEPATH "Path to the ncurses library") mark_as_advanced(NCURSES_LIBRARY) break() @@ -50,3 +57,11 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Readline DEFAULT_MSG READLINE_LIBRARY READLINE_INCLUDE_DIR) + +if(Readline_FOUND) + set(READLINE_LIBRARIES "${READLINE_LIBRARY}") + if(DEFINED NCURSES_LIBRARY) + list(APPEND READLINE_LIBRARIES "${NCURSES_LIBRARY}") + endif() + set(READLINE_INCLUDE_DIRS "${READLINE_INCLUDE_DIR}") +endif() diff --git a/cmake/PCRE2CheckVscript.cmake b/cmake/PCRE2CheckVscript.cmake index ed3ae12..eeda4c0 100644 --- a/cmake/PCRE2CheckVscript.cmake +++ b/cmake/PCRE2CheckVscript.cmake @@ -4,9 +4,63 @@ # support is detected then sets "flag_var" to the appropriate flag to pass to # the linker (namely, --version-script or -M). -function(pcre2_check_vscript have_var flag_var) +# Helper function: try to compile a shared library with a given linker flag and +# version script. This properly tests version script support by building a +# shared library rather than an executable, avoiding issues with +# executable-specific symbols (e.g. FreeBSD's crt1.o symbols, Solaris linker +# symbols in values-Xc.o). +function(_pcre2_try_vscript_shared_lib link_flag map_file result_var) + if(DEFINED ${result_var}) + return() + endif() + + message(STATUS "Performing Test ${result_var}") + + set(${result_var} FALSE PARENT_SCOPE) + + set(try_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeScratch/CheckVscript") + file(REMOVE_RECURSE "${try_dir}") + file(MAKE_DIRECTORY "${try_dir}") + + # Write a minimal C source with exported symbols + file(WRITE "${try_dir}/test_vscript.c" " +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } +") + + # Write a CMakeLists.txt that builds a shared library with the version script + file(WRITE "${try_dir}/CMakeLists.txt" " +cmake_minimum_required(VERSION 3.15) +project(test_vscript C) +add_library(test_vscript SHARED test_vscript.c) +target_link_options(test_vscript PRIVATE \"-Wl,${link_flag},${map_file}\") +") + + try_compile( + compile_result + "${try_dir}/build" # BINARY_DIR + "${try_dir}" # SOURCE_DIR + test_vscript # Project name + OUTPUT_VARIABLE compile_output + ) + + if(compile_result) + set(${result_var} TRUE PARENT_SCOPE) + endif() + + if(${compile_result}) + set(${result_var} 1 CACHE INTERNAL "Test ${result_var}") + message(STATUS "Performing Test ${result_var} - Success") + else() + set(${result_var} "" CACHE INTERNAL "Test ${result_var}") + message(STATUS "Performing Test ${result_var} - Failed") + endif() +endfunction() + +function(pcre2_check_vscript have_var flag_var no_star_var) set(${have_var} FALSE PARENT_SCOPE) set(${flag_var} "" PARENT_SCOPE) + set(${no_star_var} FALSE PARENT_SCOPE) if(MSVC) return() @@ -18,95 +72,70 @@ function(pcre2_check_vscript have_var flag_var) message(STATUS "Detecting linker version script support") endif() - include(CheckCSourceCompiles) - include(CMakePushCheckState) - - # The BSD file here is a workaround for the fact that check_c_source_compiles - # very unfortunately only supports linking executables - # with an entrypoint (or a static library), and yet the symbol visibility - # requirements for executables are understandably different on some platforms - # as compared to linking a shared library. On FreeBSD, linking fails if you - # use the linker script to hide various global symbols from /usr/lib/crt1.o. - # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=269370 - # Basically, everyone using --version-script is actually going to be creating - # a shared library. It's a frustrating mismatch. - file(WRITE ${PROJECT_BINARY_DIR}/test-map-file.sym "PCRE2_10.00 { global: exposethis; local: *; };") - file(WRITE ${PROJECT_BINARY_DIR}/test-map-file-bsd.sym "PCRE2_10.00 { global: exposethis; environ; __progname; local: *; };") - file(WRITE ${PROJECT_BINARY_DIR}/test-map-file-broken.sym "PCRE2_10.00 { global: exposethis; local: *; }; {") + # Write test version script files + file(WRITE "${PROJECT_BINARY_DIR}/test-map-file.sym" "PCRE2_10.00 { global: exposethis; local: *; };") + file(WRITE "${PROJECT_BINARY_DIR}/test-map-file-broken.sym" "PCRE2_10.00 { global: exposethis; local: *; }; {") + file(WRITE "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym" "PCRE2_10.00 { global: exposethis; local: hidethis; };") set(HAVE_VSCRIPT FALSE) - # Using an executable to check for version-script support is rather delicate, - # because linking in an entrypoint (main) adds extra symbols into the mix. - # If CMake ever added a SHARED_LIBRARY option to check_c_source_compiles, we'd - # use it here. - set( - test_source - [=[ - int exposethis = 0, hidethis = 0; - int main(void) { - return exposethis + hidethis; - } - ]=] - ) - - cmake_push_check_state(RESET) - set(CMAKE_REQUIRED_QUIET TRUE) - - set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script,${PROJECT_BINARY_DIR}/test-map-file.sym") - check_c_source_compiles("${test_source}" HAVE_VSCRIPT_GNU) + # Test GNU ld --version-script flag + _pcre2_try_vscript_shared_lib("--version-script" "${PROJECT_BINARY_DIR}/test-map-file.sym" HAVE_VSCRIPT_GNU) if(HAVE_VSCRIPT_GNU) set(VSCRIPT_FLAG --version-script) set(HAVE_VSCRIPT TRUE) else() - set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script,${PROJECT_BINARY_DIR}/test-map-file-bsd.sym") - check_c_source_compiles("${test_source}" HAVE_VSCRIPT_BSD) + # Test Sun linker -M flag + _pcre2_try_vscript_shared_lib("-M" "${PROJECT_BINARY_DIR}/test-map-file.sym" HAVE_VSCRIPT_SUN) - if(HAVE_VSCRIPT_BSD) - set(VSCRIPT_FLAG --version-script) + if(HAVE_VSCRIPT_SUN) + set(VSCRIPT_FLAG -M) set(HAVE_VSCRIPT TRUE) - else() - set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,-M,${PROJECT_BINARY_DIR}/test-map-file.sym") - check_c_source_compiles("${test_source}" HAVE_VSCRIPT_SUN) - - if(HAVE_VSCRIPT_SUN) - set(VSCRIPT_FLAG -M) - set(HAVE_VSCRIPT TRUE) - endif() endif() endif() if(HAVE_VSCRIPT) # Perform the same logic as ax_check_vscript.m4, to test whether the linker # silently ignores (and overwrites) linker scripts it doesn't understand. - set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/test-map-file-broken.sym") - check_c_source_compiles("${test_source}" HAVE_VSCRIPT_BROKEN) + _pcre2_try_vscript_shared_lib("${VSCRIPT_FLAG}" "${PROJECT_BINARY_DIR}/test-map-file-broken.sym" HAVE_VSCRIPT_BROKEN) if(HAVE_VSCRIPT_BROKEN) set(HAVE_VSCRIPT FALSE) - if(first_run) - message(STATUS "Detecting linker version script support - no (linker overwrites unknown scripts)") - endif() - else() - if(first_run) - message(STATUS "Detecting linker version script support - yes (${VSCRIPT_FLAG})") - endif() endif() - else() - if(first_run) + endif() + + if(first_run) + if(HAVE_VSCRIPT) + message(STATUS "Detecting linker version script support - yes (${VSCRIPT_FLAG})") + elseif(HAVE_VSCRIPT_BROKEN) + message(STATUS "Detecting linker version script support - no (linker overwrites unknown scripts)") + else() message(STATUS "Detecting linker version script support - none detected") endif() endif() - cmake_pop_check_state() + if(HAVE_VSCRIPT) + if(first_run) + message(STATUS "Detecting if version scripts work without wildcard") + endif() + + # Test that the linker works without requiring a wildcard to hide platform-specific + # symbols (_init, _fini, etc.). + _pcre2_try_vscript_shared_lib("${VSCRIPT_FLAG}" "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym" HAVE_VSCRIPT_NO_STAR) + + if(first_run) + message(STATUS "Detecting if version scripts work without wildcard - ${HAVE_VSCRIPT_NO_STAR}") + endif() + endif() - file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file.sym) - file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file-bsd.sym) - file(REMOVE ${PROJECT_BINARY_DIR}/test-map-file-broken.sym) + file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file.sym") + file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file-broken.sym") + file(REMOVE "${PROJECT_BINARY_DIR}/test-map-file-no-star.sym") if(HAVE_VSCRIPT) set(${have_var} TRUE PARENT_SCOPE) set(${flag_var} "${VSCRIPT_FLAG}" PARENT_SCOPE) + set(${no_star_var} "${HAVE_VSCRIPT_NO_STAR}" PARENT_SCOPE) endif() endfunction() diff --git a/configure b/configure index b3cc4d0..de94aeb 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for PCRE2 10.47. +# Generated by GNU Autoconf 2.71 for PCRE2 10.48-RC1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -419,6 +419,14 @@ else $as_nop } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. @@ -618,8 +626,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PCRE2' PACKAGE_TARNAME='pcre2' -PACKAGE_VERSION='10.47' -PACKAGE_STRING='PCRE2 10.47' +PACKAGE_VERSION='10.48-RC1' +PACKAGE_STRING='PCRE2 10.48-RC1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -660,6 +668,7 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +PCRE2_EXTRA_LOCAL_SYMS LIB_POSTFIX CET_CFLAGS WITH_GCOV_FALSE @@ -720,11 +729,6 @@ PCRE2_DATE PCRE2_PRERELEASE PCRE2_MINOR PCRE2_MAJOR -HAVE_VSCRIPT_COMPLEX_FALSE -HAVE_VSCRIPT_COMPLEX_TRUE -HAVE_VSCRIPT_FALSE -HAVE_VSCRIPT_TRUE -VSCRIPT_LDFLAGS HAVE_VISIBILITY VISIBILITY_CFLAGS LT_SYS_LIBRARY_PATH @@ -736,7 +740,6 @@ DSYMUTIL MANIFEST_TOOL RANLIB FILECMD -LN_S NM ac_ct_DUMPBIN DUMPBIN @@ -757,6 +760,7 @@ LIBTOOL OBJDUMP DLLTOOL AS +LN_S ac_ct_AR AR am__fastdepCC_FALSE @@ -1476,7 +1480,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures PCRE2 10.47 to adapt to many kinds of systems. +\`configure' configures PCRE2 10.48-RC1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1547,7 +1551,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PCRE2 10.47:";; + short | recursive ) echo "Configuration of PCRE2 10.48-RC1:";; esac cat <<\_ACEOF @@ -1744,7 +1748,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PCRE2 configure 10.47 +PCRE2 configure 10.48-RC1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2137,7 +2141,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by PCRE2 $as_me 10.47, which was +It was created by PCRE2 $as_me 10.48-RC1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3409,7 +3413,7 @@ fi # Define the identity of the package. PACKAGE='pcre2' - VERSION='10.47' + VERSION='10.48-RC1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -5345,6 +5349,20 @@ printf "%s\n" "$pcre2_cv_xlc_qhaltonmsg_fixes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } +fi + + +# As well as LT_INIT, we use LT_OUTPUT so that PCRE2_CHECK_VSCRIPT can invoke +# libtool to test version scripts correctly. case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 @@ -6171,17 +6189,6 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi - # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } @@ -13823,129 +13830,1411 @@ CC=$lt_save_CC # Only expand once: -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } -fi - +: ${CONFIG_LT=./config.lt} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_LT" >&5 +printf "%s\n" "$as_me: creating $CONFIG_LT" >&6;} +as_write_fail=0 +cat >"$CONFIG_LT" <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>"$CONFIG_LT" <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Check whether --enable-largefile was given. -if test ${enable_largefile+y} +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : - enableval=$enable_largefile; + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -if test "$enable_largefile" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -printf %s "checking for special C compiler options needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO" -then : - break +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + +# The user is always right. +if ${PATH_SEPARATOR+false} :; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_largefile_CC=' -n32'; break + + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi +if test ! -f "$as_myself"; then + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test ${ac_cv_sys_file_offset_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () { + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error - ; - return 0; + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else $as_nop + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else $as_nop + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## --------------------------------- ## +## Main body of "$CONFIG_LT" script. ## +## --------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x "$CONFIG_LT" + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $0 [OPTIONS] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +PCRE2 config.lt 10.48-RC1 +configured by $0, generated by GNU Autoconf 2.71. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $# +do + case $1 in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) as_fn_error $? "unrecognized option: $1 +Try '$0 --help' for more information." "$LINENO" 5 ;; + + *) as_fn_error $? "unrecognized argument: $1 +Try '$0 --help' for more information." "$LINENO" 5 ;; + esac + shift +done + +if $lt_cl_silent; then + exec 6>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +FILECMD \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5 +printf "%s\n" "$as_me: creating $ofile" >&6;} + + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# A file(cmd) program that detects file types. +FILECMD=$lt_FILECMD + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive (by configure). +lt_ar_flags=$lt_ar_flags + +# Flags to create an archive. +AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + $SED '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + +as_fn_exit 0 +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec 5>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec 5>>config.log +$lt_cl_success || as_fn_exit 1 + + +# Check whether --enable-largefile was given. +if test ${enable_largefile+y} +then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO" +then : + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" @@ -14177,281 +15466,184 @@ fi then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking linker version script flag" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking linker version script flag" >&5 printf %s "checking linker version script flag... " >&6; } -if test ${ax_cv_check_vscript_flag+y} +if test ${pcre2_cv_check_vscript_flag+y} then : printf %s "(cached) " >&6 else $as_nop - ax_cv_check_vscript_flag=unsupported - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: show; local: *; };" > conftest.map - if test x = xyes -then : - - echo "{" >> conftest.map + pcre2_cv_check_vscript_flag=unsupported -fi - LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int show, hide; -int -main (void) -{ - ; - return 0; -} + rm -rf conftest.vscript + mkdir conftest.vscript + cat > conftest.vscript/conftest.c <<_ACEOF +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - - ax_cv_check_vscript_flag=--version-script - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - if test x$ax_cv_check_vscript_flag = xunsupported -then : - - # PCRE2: Support for FreeBSD. Rather annoyingly, AC_LINK_IFELSE will - # only test linking executables, and in turn, on FreeBSD the main - # entrypoint will fail to link if you use "local: *" to hide the - # visibility of various shared symbols injected from /usr/lib/crt1.o. - # It's not at all pretty to hardcode those symbol names here, but I - # can't think of an obvious way to improve on this. - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: show;environ;__progname; local: *; };" > conftest.map - if test x = xyes -then : - - echo "{" >> conftest.map - -fi - LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int show, hide; -int -main (void) -{ - - ; - return 0; -} + echo "PCRE2_10.00 { global: exposethis; local: *; };" > conftest.vscript/conftest.map + _pcre2_abs_top_builddir="$ac_pwd" + _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool" + _pcre2_vscript_cc="$CC" + _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS" + _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS" + _pcre2_vscript_script_flag="--version-script" + export _pcre2_vscript_libtool + export _pcre2_vscript_cc + export _pcre2_vscript_compile_flags + export _pcre2_vscript_ld_flags + export _pcre2_vscript_script_flag + if (cd conftest.vscript && \ + $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \ + $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1 +then : + pcre2_cv_check_vscript_flag=--version-script +fi + unset _pcre2_vscript_libtool + unset _pcre2_vscript_cc + unset _pcre2_vscript_compile_flags + unset _pcre2_vscript_ld_flags + unset _pcre2_vscript_script_flag + rm -rf conftest.vscript + + if test x$pcre2_cv_check_vscript_flag = xunsupported +then : + + + rm -rf conftest.vscript + mkdir conftest.vscript + cat > conftest.vscript/conftest.c <<_ACEOF +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } _ACEOF -if ac_fn_c_try_link "$LINENO" + echo "PCRE2_10.00 { global: exposethis; local: *; };" > conftest.vscript/conftest.map + _pcre2_abs_top_builddir="$ac_pwd" + _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool" + _pcre2_vscript_cc="$CC" + _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS" + _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS" + _pcre2_vscript_script_flag="-M" + export _pcre2_vscript_libtool + export _pcre2_vscript_cc + export _pcre2_vscript_compile_flags + export _pcre2_vscript_ld_flags + export _pcre2_vscript_script_flag + if (cd conftest.vscript && \ + $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \ + $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1 then : - - ax_cv_check_vscript_flag=--version-script - + pcre2_cv_check_vscript_flag=-M fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - + unset _pcre2_vscript_libtool + unset _pcre2_vscript_cc + unset _pcre2_vscript_compile_flags + unset _pcre2_vscript_ld_flags + unset _pcre2_vscript_script_flag + rm -rf conftest.vscript fi - if test x$ax_cv_check_vscript_flag = xunsupported -then : - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: show; local: *; };" > conftest.map - if test x = xyes + if test x$pcre2_cv_check_vscript_flag != xunsupported then : - echo "{" >> conftest.map - -fi - LDFLAGS="$LDFLAGS -Wl,-M,conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int show, hide; -int -main (void) -{ - ; - return 0; -} + rm -rf conftest.vscript + mkdir conftest.vscript + cat > conftest.vscript/conftest.c <<_ACEOF +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } _ACEOF -if ac_fn_c_try_link "$LINENO" + echo "PCRE2_10.00 { global: exposethis; local: *; }; {" > conftest.vscript/conftest.map + _pcre2_abs_top_builddir="$ac_pwd" + _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool" + _pcre2_vscript_cc="$CC" + _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS" + _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS" + _pcre2_vscript_script_flag="$pcre2_cv_check_vscript_flag" + export _pcre2_vscript_libtool + export _pcre2_vscript_cc + export _pcre2_vscript_compile_flags + export _pcre2_vscript_ld_flags + export _pcre2_vscript_script_flag + if (cd conftest.vscript && \ + $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \ + $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1 then : - ax_cv_check_vscript_flag=-M + pcre2_cv_check_vscript_flag=unsupported fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - + unset _pcre2_vscript_libtool + unset _pcre2_vscript_cc + unset _pcre2_vscript_compile_flags + unset _pcre2_vscript_ld_flags + unset _pcre2_vscript_script_flag + rm -rf conftest.vscript fi - - if test x$ax_cv_check_vscript_flag != xunsupported -then : - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: show; local: *; };" > conftest.map - if test xyes = xyes -then : - - echo "{" >> conftest.map - fi - LDFLAGS="$LDFLAGS -Wl,$ax_cv_check_vscript_flag,conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int show, hide; -int -main (void) -{ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pcre2_cv_check_vscript_flag" >&5 +printf "%s\n" "$pcre2_cv_check_vscript_flag" >&6; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" + if test x$pcre2_cv_check_vscript_flag != xunsupported then : - ax_cv_check_vscript_flag=unsupported -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_vscript_flag" >&5 -printf "%s\n" "$ax_cv_check_vscript_flag" >&6; } - - - if test x$ax_cv_check_vscript_flag != xunsupported -then : - - ax_check_vscript_flag=$ax_cv_check_vscript_flag - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if version scripts can use complex wildcards" >&5 -printf %s "checking if version scripts can use complex wildcards... " >&6; } -if test ${ax_cv_check_vscript_complex_wildcards+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if version scripts work without wildcard" >&5 +printf %s "checking if version scripts work without wildcard... " >&6; } +if test ${pcre2_cv_check_vscript_no_star+y} then : printf %s "(cached) " >&6 else $as_nop - ax_cv_check_vscript_complex_wildcards=no - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: sh*; local: *; };" > conftest.map - if test x = xyes -then : - - echo "{" >> conftest.map - -fi - LDFLAGS="$LDFLAGS -Wl,$ax_cv_check_vscript_flag,conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int show, hide; -int -main (void) -{ + pcre2_cv_check_vscript_no_star=no - ; - return 0; -} + rm -rf conftest.vscript + mkdir conftest.vscript + cat > conftest.vscript/conftest.c <<_ACEOF +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } _ACEOF -if ac_fn_c_try_link "$LINENO" + echo "PCRE2_10.00 { global: exposethis; local: hidethis; };" > conftest.vscript/conftest.map + _pcre2_abs_top_builddir="$ac_pwd" + _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool" + _pcre2_vscript_cc="$CC" + _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS" + _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS" + _pcre2_vscript_script_flag="$pcre2_cv_check_vscript_flag" + export _pcre2_vscript_libtool + export _pcre2_vscript_cc + export _pcre2_vscript_compile_flags + export _pcre2_vscript_ld_flags + export _pcre2_vscript_script_flag + if (cd conftest.vscript && \ + $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \ + $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&5 2>&1 then : - - ax_cv_check_vscript_complex_wildcards=yes + pcre2_cv_check_vscript_no_star=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - + unset _pcre2_vscript_libtool + unset _pcre2_vscript_cc + unset _pcre2_vscript_compile_flags + unset _pcre2_vscript_ld_flags + unset _pcre2_vscript_script_flag + rm -rf conftest.vscript fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_vscript_complex_wildcards" >&5 -printf "%s\n" "$ax_cv_check_vscript_complex_wildcards" >&6; } - ax_check_vscript_complex_wildcards="$ax_cv_check_vscript_complex_wildcards" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pcre2_cv_check_vscript_no_star" >&5 +printf "%s\n" "$pcre2_cv_check_vscript_no_star" >&6; } + + pcre2_check_vscript_flag=$pcre2_cv_check_vscript_flag + pcre2_check_vscript_no_star=$pcre2_cv_check_vscript_no_star else $as_nop - ax_check_vscript_flag= - ax_check_vscript_complex_wildcards=no + pcre2_check_vscript_flag= + pcre2_check_vscript_no_star=no fi @@ -14462,38 +15654,13 @@ printf %s "checking linker version script flag... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 printf "%s\n" "disabled" >&6; } - ax_check_vscript_flag= - ax_check_vscript_complex_wildcards=no - -fi - - if test x$ax_check_vscript_flag != x -then : - - VSCRIPT_LDFLAGS="-Wl,$ax_check_vscript_flag" - - -fi - - if test x$ax_check_vscript_flag != x; then - HAVE_VSCRIPT_TRUE= - HAVE_VSCRIPT_FALSE='#' -else - HAVE_VSCRIPT_TRUE='#' - HAVE_VSCRIPT_FALSE= -fi + pcre2_check_vscript_flag= + pcre2_check_vscript_no_star=no - if test x$ax_check_vscript_complex_wildcards = xyes; then - HAVE_VSCRIPT_COMPLEX_TRUE= - HAVE_VSCRIPT_COMPLEX_FALSE='#' -else - HAVE_VSCRIPT_COMPLEX_TRUE='#' - HAVE_VSCRIPT_COMPLEX_FALSE= fi - # Check for Clang __attribute__((uninitialized)) feature { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__((uninitialized))" >&5 @@ -14681,9 +15848,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Versioning PCRE2_MAJOR="10" -PCRE2_MINOR="47" -PCRE2_PRERELEASE="" -PCRE2_DATE="2025-10-21" +PCRE2_MINOR="48" +PCRE2_PRERELEASE="-RC1" +PCRE2_DATE="2026-08-27" if test "$PCRE2_MINOR" = "08" -o "$PCRE2_MINOR" = "09" then @@ -15563,6 +16730,12 @@ if test "x$ac_cv_func_secure_getenv" = xyes then : printf "%s\n" "#define HAVE_SECURE_GETENV 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "setrlimit" "ac_cv_func_setrlimit" +if test "x$ac_cv_func_setrlimit" = xyes +then : + printf "%s\n" "#define HAVE_SETRLIMIT 1" >>confdefs.h + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for realpath" >&5 @@ -17214,31 +18387,31 @@ esac # are m4 variables, assigned above. EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \ - $NO_UNDEFINED -version-info 15:0:15" + $NO_UNDEFINED -version-info 16:0:16" EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \ - $NO_UNDEFINED -version-info 15:0:15" + $NO_UNDEFINED -version-info 16:0:16" EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \ - $NO_UNDEFINED -version-info 15:0:15" + $NO_UNDEFINED -version-info 16:0:16" EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \ - $NO_UNDEFINED -version-info 3:7:0" + $NO_UNDEFINED -version-info 3:8:0" # Append each library's version script, if the platform supports it. -if test x$ax_check_vscript_flag != x ; then +if test x$pcre2_check_vscript_flag != x ; then EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-8.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-8.sym" EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-16.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-16.sym" EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-32.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-32.sym" EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-posix.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-posix.sym" fi @@ -17768,9 +18941,18 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Pass empty LIB_POSTFIX to *.pc files and pcre2-config here. +# Set the extra "local: *" symbol section conditionally for Solaris (effectively). + +if test x$pcre2_check_vscript_flag != x && test x$pcre2_check_vscript_no_star = xno; then + PCRE2_EXTRA_LOCAL_SYMS=" local: *;" +else + PCRE2_EXTRA_LOCAL_SYMS="" +fi + + # Produce these files, in addition to config.h. -ac_config_files="$ac_config_files Makefile libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc libpcre2-posix.pc pcre2-config src/pcre2.h" +ac_config_files="$ac_config_files Makefile libpcre2-8.pc libpcre2-16.pc libpcre2-32.pc libpcre2-posix.pc pcre2-config src/pcre2.h src/libpcre2-8.sym src/libpcre2-16.sym src/libpcre2-32.sym src/libpcre2-posix.sym" # Make the generated script files executable. @@ -17928,14 +19110,6 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${HAVE_VSCRIPT_TRUE}" && test -z "${HAVE_VSCRIPT_FALSE}"; then - as_fn_error $? "conditional \"HAVE_VSCRIPT\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_VSCRIPT_COMPLEX_TRUE}" && test -z "${HAVE_VSCRIPT_COMPLEX_FALSE}"; then - as_fn_error $? "conditional \"HAVE_VSCRIPT_COMPLEX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${WITH_PCRE2_8_TRUE}" && test -z "${WITH_PCRE2_8_FALSE}"; then as_fn_error $? "conditional \"WITH_PCRE2_8\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -18374,7 +19548,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by PCRE2 $as_me 10.47, which was +This file was extended by PCRE2 $as_me 10.48-RC1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18442,7 +19616,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -PCRE2 config.status 10.47 +PCRE2 config.status 10.48-RC1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" @@ -18847,6 +20021,7 @@ fi RM='$RM' ofile='$ofile' +ac_aux_dir='$ac_aux_dir' @@ -18868,6 +20043,10 @@ do "libpcre2-posix.pc") CONFIG_FILES="$CONFIG_FILES libpcre2-posix.pc" ;; "pcre2-config") CONFIG_FILES="$CONFIG_FILES pcre2-config" ;; "src/pcre2.h") CONFIG_FILES="$CONFIG_FILES src/pcre2.h" ;; + "src/libpcre2-8.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-8.sym" ;; + "src/libpcre2-16.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-16.sym" ;; + "src/libpcre2-32.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-32.sym" ;; + "src/libpcre2-posix.sym") CONFIG_FILES="$CONFIG_FILES src/libpcre2-posix.sym" ;; "script-chmod") CONFIG_COMMANDS="$CONFIG_COMMANDS script-chmod" ;; "delete-old-chartables") CONFIG_COMMANDS="$CONFIG_COMMANDS delete-old-chartables" ;; @@ -20176,7 +21355,7 @@ fi with_symbol_versioning=n/a if test x$want_symvers != xyes; then with_symbol_versioning=no -elif test x$ax_check_vscript_flag != x; then +elif test x$pcre2_check_vscript_flag != x; then with_symbol_versioning=yes fi diff --git a/configure.ac b/configure.ac index ff44d77..8592c2e 100644 --- a/configure.ac +++ b/configure.ac @@ -9,15 +9,15 @@ dnl The PCRE2_PRERELEASE feature is for identifying release candidates. It might dnl be defined as -RC2, for example. For real releases, it should be empty. m4_define(pcre2_major, [10]) -m4_define(pcre2_minor, [47]) -m4_define(pcre2_prerelease, []) -m4_define(pcre2_date, [2025-10-21]) +m4_define(pcre2_minor, [48]) +m4_define(pcre2_prerelease, [-RC1]) +m4_define(pcre2_date, [2026-08-27]) # Libtool shared library interface versions (current:revision:age) -m4_define(libpcre2_8_version, [15:0:15]) -m4_define(libpcre2_16_version, [15:0:15]) -m4_define(libpcre2_32_version, [15:0:15]) -m4_define(libpcre2_posix_version, [3:7:0]) +m4_define(libpcre2_8_version, [16:0:16]) +m4_define(libpcre2_16_version, [16:0:16]) +m4_define(libpcre2_32_version, [16:0:16]) +m4_define(libpcre2_posix_version, [3:8:0]) # NOTE: The CMakeLists.txt file searches for the above variables in the first # 50 lines of this file. Please update that if the variables above are moved. @@ -76,9 +76,13 @@ AC_TYPE_INT64_T PCRE2_ZOS_FIXES AC_PROG_INSTALL -LT_INIT([win32-dll]) AC_PROG_LN_S +# As well as LT_INIT, we use LT_OUTPUT so that PCRE2_CHECK_VSCRIPT can invoke +# libtool to test version scripts correctly. +LT_INIT([win32-dll]) +LT_OUTPUT + AC_SYS_LARGEFILE # Check for GCC visibility feature @@ -87,7 +91,7 @@ PCRE2_VISIBILITY # Check for the availability of -Wl,--version-script (or -Wl,-M on Solaris) -AX_CHECK_VSCRIPT +PCRE2_CHECK_VSCRIPT # Check for Clang __attribute__((uninitialized)) feature @@ -623,7 +627,7 @@ AC_TYPE_SIZE_T # Checks for library functions. -AC_CHECK_FUNCS(memfd_create mkostemp secure_getenv) +AC_CHECK_FUNCS(memfd_create mkostemp secure_getenv setrlimit) AC_MSG_CHECKING([for realpath]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include @@ -1043,18 +1047,18 @@ EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \ # Append each library's version script, if the platform supports it. -if test x$ax_check_vscript_flag != x ; then +if test x$pcre2_check_vscript_flag != x ; then EXTRA_LIBPCRE2_8_LDFLAGS="$EXTRA_LIBPCRE2_8_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-8.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-8.sym" EXTRA_LIBPCRE2_16_LDFLAGS="$EXTRA_LIBPCRE2_16_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-16.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-16.sym" EXTRA_LIBPCRE2_32_LDFLAGS="$EXTRA_LIBPCRE2_32_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-32.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-32.sym" EXTRA_LIBPCRE2_POSIX_LDFLAGS="$EXTRA_LIBPCRE2_POSIX_LDFLAGS \ - -Wl,$ax_check_vscript_flag,\$(srcdir)/src/libpcre2-posix.sym" + -Wl,$pcre2_check_vscript_flag,\$(builddir)/src/libpcre2-posix.sym" fi AC_SUBST(EXTRA_LIBPCRE2_8_LDFLAGS) @@ -1198,6 +1202,15 @@ AC_LANG_POP([C]) # Pass empty LIB_POSTFIX to *.pc files and pcre2-config here. AC_SUBST(LIB_POSTFIX) +# Set the extra "local: *" symbol section conditionally for Solaris (effectively). + +if test x$pcre2_check_vscript_flag != x && test x$pcre2_check_vscript_no_star = xno; then + PCRE2_EXTRA_LOCAL_SYMS=" local: *;" +else + PCRE2_EXTRA_LOCAL_SYMS="" +fi +AC_SUBST([PCRE2_EXTRA_LOCAL_SYMS]) + # Produce these files, in addition to config.h. AC_CONFIG_FILES( @@ -1208,6 +1221,10 @@ AC_CONFIG_FILES( libpcre2-posix.pc pcre2-config src/pcre2.h + src/libpcre2-8.sym + src/libpcre2-16.sym + src/libpcre2-32.sym + src/libpcre2-posix.sym ) # Make the generated script files executable. @@ -1250,7 +1267,7 @@ fi with_symbol_versioning=n/a if test x$want_symvers != xyes; then with_symbol_versioning=no -elif test x$ax_check_vscript_flag != x; then +elif test x$pcre2_check_vscript_flag != x; then with_symbol_versioning=yes fi diff --git a/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c b/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c index 36d3014..62f7371 100644 --- a/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c +++ b/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c @@ -90,6 +90,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) #ifdef PROT_MAX prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC); #endif +#ifdef PROT_MPROTECT + prot |= PROT_MPROTECT(PROT_EXEC); +#endif size += sizeof(sljit_uw); ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); diff --git a/deps/sljit/sljit_src/sljitConfig.h b/deps/sljit/sljit_src/sljitConfig.h index 993f4fe..d43e8ae 100644 --- a/deps/sljit/sljit_src/sljitConfig.h +++ b/deps/sljit/sljit_src/sljitConfig.h @@ -133,7 +133,7 @@ extern "C" { nonzero value - FPU is present. */ -/* For further configurations, see the beginning of sljitConfigInternal.h */ +/* For further configurations, see sljitConfigCPU.h and sljitConfigInternal.h */ #ifdef __cplusplus } /* extern "C" */ diff --git a/deps/sljit/sljit_src/sljitConfigCPU.h b/deps/sljit/sljit_src/sljitConfigCPU.h index dcf88ef..a0d8d44 100644 --- a/deps/sljit/sljit_src/sljitConfigCPU.h +++ b/deps/sljit/sljit_src/sljitConfigCPU.h @@ -46,6 +46,7 @@ /* #define SLJIT_CONFIG_RISCV_64 1 */ /* #define SLJIT_CONFIG_S390X 1 */ /* #define SLJIT_CONFIG_LOONGARCH_64 */ +/* #define SLJIT_CONFIG_ALPHA_64 1 */ /* #define SLJIT_CONFIG_AUTO 1 */ /* #define SLJIT_CONFIG_UNSUPPORTED 1 */ @@ -68,6 +69,7 @@ + (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ + (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ + (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + + (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ + (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) \ + (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) >= 2 #error "Multiple architectures are selected" @@ -87,6 +89,7 @@ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ && !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) \ && !(defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) #if defined SLJIT_CONFIG_AUTO && !SLJIT_CONFIG_AUTO @@ -134,6 +137,8 @@ #define SLJIT_CONFIG_LOONGARCH_64 1 #elif defined(__s390x__) #define SLJIT_CONFIG_S390X 1 +#elif defined(__alpha__) +#define SLJIT_CONFIG_ALPHA_64 1 #else /* Unsupported architecture */ #define SLJIT_CONFIG_UNSUPPORTED 1 @@ -183,6 +188,78 @@ #define SLJIT_CONFIG_RISCV 1 #elif (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) #define SLJIT_CONFIG_LOONGARCH 1 +#elif (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) +#define SLJIT_CONFIG_ALPHA 1 +#endif + +/*************************/ +/* Endianness detection. */ +/*************************/ + +#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) + +#if defined(SLJIT_CONFIG_ARM) && SLJIT_CONFIG_ARM + +#ifdef __ARM_BIG_ENDIAN +#define SLJIT_BIG_ENDIAN 1 +#else +#define SLJIT_LITTLE_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) + +#ifdef __LITTLE_ENDIAN__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + +#ifdef __MIPSEL__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#ifndef SLJIT_MIPS_REV + +/* Auto detecting mips revision. */ +#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) +#define SLJIT_MIPS_REV 6 +#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 +#define SLJIT_MIPS_REV __mips_isa_rev +#elif defined(__clang__) \ + && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) +/* clang either forgets to define (clang-7) __mips_isa_rev at all + * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) + * and -march=p5600 (MIPS32 R5). + * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 + * (should be set to N exactly) so we cannot rely on this too. + */ +#define SLJIT_MIPS_REV 1 +#endif + +#endif /* !SLJIT_MIPS_REV */ + +#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) + +#define SLJIT_BIG_ENDIAN 1 + +#else + +#define SLJIT_LITTLE_ENDIAN 1 + +#endif + +#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ + +#if (defined(SLJIT_CONFIG_ARM_64) && SLJIT_CONFIG_ARM_64) \ + && (defined(SLJIT_BIG_ENDIAN) && SLJIT_BIG_ENDIAN) + +#undef SLJIT_CONFIG_ARM_64 +#define SLJIT_CONFIG_UNSUPPORTED 1 + #endif #endif /* SLJIT_CONFIG_CPU_H_ */ diff --git a/deps/sljit/sljit_src/sljitConfigInternal.h b/deps/sljit/sljit_src/sljitConfigInternal.h index c052434..9c22234 100644 --- a/deps/sljit/sljit_src/sljitConfigInternal.h +++ b/deps/sljit/sljit_src/sljitConfigInternal.h @@ -54,6 +54,14 @@ SLJIT_UPPER_BITS_ZERO_EXTENDED : 32 bit operations clears the upper bits of destination registers SLJIT_UPPER_BITS_SIGN_EXTENDED : 32 bit operations replicates the sign bit in the upper bits of destination registers SLJIT_UPPER_BITS_PRESERVED : 32 bit operations preserves the upper bits of destination registers + SLJIT_SUBC_SETS_SIGNED : SLJIT_SUBC[32] operation always sets the signed result, so setting + the following status flags after a subtract with carry operation is valid: + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_LESS) + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_GREATER) + SLJIT_SHARED_COMPARISON_FLAGS: the cpu has different instructions for signed and unsigned + comparisons, which sets the same status flags, so passing SLJIT_LESS + or SLJIT_SIG_LESS as an argument has the same effect, and this is true + for all other signed/unsigned comparison type pairs Constants: SLJIT_NUMBER_OF_REGISTERS : number of available registers @@ -100,18 +108,21 @@ SLJIT_TMP_DEST_REG : a temporary register for results, see the rules below SLJIT_TMP_DEST_FREG : a temporary register for float results, see the rules below SLJIT_TMP_DEST_VREG : a temporary register for vector results, see the rules below - SLJIT_TMP_OPT_REG : a temporary register which might not be defined, see the rules below + SLJIT_TMP_OPT_REG : an optional temporary register, see the rules below + SLJIT_TMP_FLAG_REG : an optional temporary register for storing the value of a flag SLJIT_FUNC : calling convention attribute for both calling JIT from C and C calling back from JIT SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (platform independent helper) SLJIT_F64_SECOND(reg) : provides the register index of the second 32 bit part of a 64 bit floating point register when SLJIT_HAS_F64_AS_F32_PAIR returns non-zero Temporary register rules (e.g. SLJIT_TMP_DEST_REG / SLJIT_TMP_OPT_REG): - Sljit tries to emit instructions without using any temporary registers whenever it is possible. - When a single temporary register is needed, it is always the "OPT" register. When two temporary - registers are needed, both the "DEST" and "OPT" are used. The x86-32 does not define an "OPT" - register, and handles all cases without an "OPT" register which requires an "OPT" register - on other architectures. + The sljit compiler avoids using temporary registers, but certain instruction + forms cannot be generated without them. The number of temporary registers + reserved by the compiler depends on the target architecture. An SLJIT_TMP_* + name is assigned to some of these registers, which represents their + SLJIT_TMP_R(i) index. When such register is optional, it might not be + defined on all architectures. For example, the x86-32 code generator does + not use any optional temporary registers. */ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -124,6 +135,13 @@ #include #endif +#ifdef __APPLE__ +#include +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 +#include +#endif +#endif + #ifdef __cplusplus extern "C" { #endif @@ -242,10 +260,6 @@ extern "C" { /* Instruction cache flush. */ /****************************/ -#ifdef __APPLE__ -#include -#endif - /* * TODO: * @@ -291,7 +305,6 @@ extern "C" { /* Supported by all macs since Mac OS 10.5. However, it does not work on non-jailbroken iOS devices, although the compilation is successful. */ -#include #define SLJIT_CACHE_FLUSH(from, to) \ sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from))) @@ -359,7 +372,8 @@ typedef int sljit_sw; && !(defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) + && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) #define SLJIT_32BIT_ARCHITECTURE 1 #define SLJIT_WORD_SHIFT 2 typedef unsigned int sljit_uw; @@ -428,6 +442,12 @@ typedef double sljit_f64; #define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT #define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT #define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +/* CVTTQ/SVC uses software completion; sljit_emit_fop1_conv_sw_from_f64 + emits FCMPLT/CMPTEQ + CMOVNE/CMOVEQ fixups to enforce saturation. */ +#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT +#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT +#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO #else #error "Result for float to integer conversion is not defined" #endif @@ -451,55 +471,6 @@ typedef double sljit_f64; /* Endianness detection. */ /*************************/ -#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) - -/* These macros are mostly useful for the applications. */ -#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) - -#ifdef __LITTLE_ENDIAN__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) - -#ifdef __MIPSEL__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#ifndef SLJIT_MIPS_REV - -/* Auto detecting mips revision. */ -#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) -#define SLJIT_MIPS_REV 6 -#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 -#define SLJIT_MIPS_REV __mips_isa_rev -#elif defined(__clang__) \ - && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) -/* clang either forgets to define (clang-7) __mips_isa_rev at all - * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) - * and -march=p5600 (MIPS32 R5). - * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 - * (should be set to N exactly) so we cannot rely on this too. - */ -#define SLJIT_MIPS_REV 1 -#endif - -#endif /* !SLJIT_MIPS_REV */ - -#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) - -#define SLJIT_BIG_ENDIAN 1 - -#else -#define SLJIT_LITTLE_ENDIAN 1 -#endif - -#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ - /* Sanity check. */ #if (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN) && (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN) #error "Exactly one endianness must be selected" @@ -616,6 +587,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) @@ -640,6 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) @@ -653,6 +626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) @@ -670,6 +644,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) @@ -691,6 +666,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw)) #endif /* SLJIT_CONFIG_PPC_64 || _AIX */ #define SLJIT_UPPER_BITS_IGNORED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -709,10 +685,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 3 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) @@ -728,6 +706,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_VECTOR_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_TMP_DEST_VREG SLJIT_TMP_VR0 #define SLJIT_LOCALS_OFFSET_BASE 0 @@ -735,6 +714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -772,6 +752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_PRESERVED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) @@ -783,11 +764,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 + +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) + +/* Alpha has 32 general registers (r31 hardwired zero) and 32 float registers + (f31 hardwired zero). Reserved: r31 (zero), r30 (sp), r29 (gp, unused by the + JIT). Backend temporaries: r24, r25, r26 (ra), r27 (pv), r28 (at). Exposed: + 17 scratch (r0-r8, r16-r23) + 7 callee-saved (r9-r15). */ +#define SLJIT_NUMBER_OF_REGISTERS 24 +#define SLJIT_NUMBER_OF_SAVED_REGISTERS 7 +#define SLJIT_NUMBER_OF_TEMPORARY_REGISTERS 5 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 28 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 +#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 +#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 +#define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 +#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 +/* One word is reserved at the bottom of the frame: CPUs without the FIX + extension have no register to register move between the integer and float + register files, so values are bounced through this slot instead. */ +#define SLJIT_LOCALS_OFFSET_BASE ((sljit_s32)sizeof(sljit_sw)) +#define SLJIT_MASKED_SHIFT 1 +#define SLJIT_MASKED_SHIFT32 1 +#define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) @@ -894,7 +902,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ || (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) \ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) + || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) \ + || (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) #define SLJIT_HAS_STATUS_FLAGS_STATE 1 #endif diff --git a/deps/sljit/sljit_src/sljitLir.c b/deps/sljit/sljit_src/sljitLir.c index 633e794..e8c77f8 100644 --- a/deps/sljit/sljit_src/sljitLir.c +++ b/deps/sljit/sljit_src/sljitLir.c @@ -2484,7 +2484,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((type & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(type, compiler->last_flags)); @@ -2746,7 +2746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_select(struct sljit_compi CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((cond & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(cond, compiler->last_flags)); @@ -3495,6 +3495,8 @@ static void sljit_reset_read_only_buffers(struct sljit_read_only_buffer *buffers # include "sljitNativeS390X.c" #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) # include "sljitNativeLOONGARCH_64.c" +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +# include "sljitNativeALPHA_64.c" #endif /* SLJIT_CONFIG_X86 */ #include "sljitSerialize.c" @@ -3737,7 +3739,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem_update(struct sljit_compiler * #endif /* !SLJIT_CONFIG_ARM && !SLJIT_CONFIG_PPC */ #if !(defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ - && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ + && !(defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, @@ -3749,7 +3752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); } -#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS */ +#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS && !SLJIT_CONFIG_ALPHA */ #if !(defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ && !(defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) diff --git a/deps/sljit/sljit_src/sljitLir.h b/deps/sljit/sljit_src/sljitLir.h index c5bf128..019ad60 100644 --- a/deps/sljit/sljit_src/sljitLir.h +++ b/deps/sljit/sljit_src/sljitLir.h @@ -1167,7 +1167,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c #define SLJIT_OP0_BASE 0 /* Flags: - (does not modify flags) - Note: breakpoint instruction is not supported by all architectures (e.g. ppc) + Triggers a trap that could be intercepted by a debugger + Note: might not be supported by all architectures, It falls back to SLJIT_NOP in those cases. */ #define SLJIT_BREAKPOINT (SLJIT_OP0_BASE + 0) /* Flags: - (does not modify flags) @@ -1761,7 +1762,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -/* Unlike other flags, sljit_emit_jump may destroy the carry flag. */ +/* Unlike other comparison types, sljit_emit_jump may destroy zero flag + when carry flag is specified (powerpc limitation). Furthermore, + SLJIT_CARRY represents that the first operand is unsigned less than + the second operand after an SLJIT_SUB / SLJIT_SUBC operation. */ #define SLJIT_CARRY 12 #define SLJIT_SET_CARRY SLJIT_SET(SLJIT_CARRY) #define SLJIT_NOT_CARRY 13 @@ -2023,11 +2027,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com /* The following flags are used by sljit_emit_mem() and sljit_emit_fmem(). */ -/* Load or stora data from an unaligned (byte aligned) address. */ +/* Load or store data from an unaligned (byte aligned) address. */ #define SLJIT_MEM_UNALIGNED 0x000400 -/* Load or stora data from a 16 bit aligned address. */ +/* Load or store data from a 16 bit aligned address. */ #define SLJIT_MEM_ALIGNED_16 0x000800 -/* Load or stora data from a 32 bit aligned address. */ +/* Load or store data from a 32 bit aligned address. */ #define SLJIT_MEM_ALIGNED_32 0x001000 /* The following flags are used by sljit_emit_mem_update(), @@ -2732,8 +2736,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st /* All JIT related code should be placed in the same context (library, binary, etc.). */ /* Get the entry address of a given function (signed, unsigned result). */ -#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(void*)func_name) -#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(void*)func_name) +#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(sljit_uw)func_name) +#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(sljit_uw)func_name) /* For powerpc64, the function pointers point to a context descriptor. */ struct sljit_function_context { @@ -2745,7 +2749,7 @@ struct sljit_function_context { /* Fill the context arguments using the addr and the function. If func_ptr is NULL, it will not be set to the address of context If addr is NULL, the function address also comes from the func pointer. */ -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func); +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)); #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ diff --git a/deps/sljit/sljit_src/sljitNativeARM_32.c b/deps/sljit/sljit_src/sljitNativeARM_32.c index 16ef399..ef2762f 100644 --- a/deps/sljit/sljit_src/sljitNativeARM_32.c +++ b/deps/sljit/sljit_src/sljitNativeARM_32.c @@ -2650,7 +2650,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeARM_64.c b/deps/sljit/sljit_src/sljitNativeARM_64.c index dabbd3b..06d94a9 100644 --- a/deps/sljit/sljit_src/sljitNativeARM_64.c +++ b/deps/sljit/sljit_src/sljitNativeARM_64.c @@ -70,7 +70,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VM(vm) ((sljit_ins)freg_map[vm] << 16) /* --------------------------------------------------------------------- */ -/* Instruction forms */ +/* Instruction forms */ /* --------------------------------------------------------------------- */ #define ADC 0x9a000000 @@ -157,7 +157,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SDIV 0x9ac00c00 #define SMADDL 0x9b200000 #define SMOV 0x0e002c00 -#define SMULH 0x9b403c00 +#define SMULH 0x9b407c00 #define SSHLL 0x0f00a400 #define ST1 0x0c007000 #define ST1_s 0x0d000000 @@ -173,7 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define STUR_FI 0x3c000000 #define STURBI 0x38000000 #define STXR 0xc8007c00 -#define STXRB 0x8007c00 +#define STXRB 0x08007c00 #define STXRH 0x48007c00 #define SUB 0xcb000000 #define SUBI 0xd1000000 @@ -184,7 +184,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define UCVTF 0x9e630000 #define UDIV 0x9ac00800 #define UMOV 0x0e003c00 -#define UMULH 0x9bc03c00 +#define UMULH 0x9bc07c00 #define USHLL 0x2f00a400 #define USHR 0x2f000400 #define USRA 0x2f001400 @@ -1893,7 +1893,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeARM_T2_32.c b/deps/sljit/sljit_src/sljitNativeARM_T2_32.c index eab9ec1..6608457 100644 --- a/deps/sljit/sljit_src/sljitNativeARM_T2_32.c +++ b/deps/sljit/sljit_src/sljitNativeARM_T2_32.c @@ -2217,7 +2217,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c b/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c index 1331966..83e6e29 100644 --- a/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c +++ b/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c @@ -70,9 +70,9 @@ LoongArch instructions are 32 bits wide, belonging to 9 basic instruction format | 1RI21 | Opcode + I21L + Rj + I21H | | I26 | Opcode + I26L + I26H | -Rd is the destination register operand, while Rj, Rk and Ra (“a” stands for “additional”) are the source register operands. +Rd is the destination register operand, while Rj, Rk and Ra ("a" stands for "additional") are the source register operands. I8/I12/I14/I16/I21/I26 are immediate operands of respective width. The longer I21 and I26 are stored in separate higher and -lower parts in the instruction word, denoted by the “L” and “H” suffixes. */ +lower parts in the instruction word, denoted by the "L" and "H" suffixes. */ #define RD(rd) ((sljit_ins)reg_map[rd]) #define RJ(rj) ((sljit_ins)reg_map[rj] << 5) @@ -2191,7 +2191,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeMIPS_common.c b/deps/sljit/sljit_src/sljitNativeMIPS_common.c index 771abfe..96fa342 100644 --- a/deps/sljit/sljit_src/sljitNativeMIPS_common.c +++ b/deps/sljit/sljit_src/sljitNativeMIPS_common.c @@ -2811,7 +2811,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativePPC_common.c b/deps/sljit/sljit_src/sljitNativePPC_common.c index 07df86f..ea0597b 100644 --- a/deps/sljit/sljit_src/sljitNativePPC_common.c +++ b/deps/sljit/sljit_src/sljitNativePPC_common.c @@ -292,14 +292,14 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #endif /* SLJIT_LITTLE_ENDIAN */ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func) +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)) { sljit_uw* ptrs; if (func_ptr) *func_ptr = (void*)context; - ptrs = (sljit_uw*)func; + ptrs = (sljit_uw*)(sljit_uw)func; context->addr = addr ? addr : ptrs[0]; context->r2 = ptrs[1]; context->r11 = ptrs[2]; @@ -749,7 +749,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (((sljit_sw)code_ptr) & 0x4) code_ptr++; #endif /* SLJIT_CONFIG_PPC_64 */ - sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code); + sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void (*)(void))sljit_generate_code); } #endif /* SLJIT_INDIRECT_CALL */ @@ -1422,6 +1422,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile op = GET_OPCODE(op); switch (op) { case SLJIT_BREAKPOINT: + return push_inst(compiler, 0x7fe00008); case SLJIT_NOP: return push_inst(compiler, NOP); case SLJIT_LMUL_UW: @@ -1733,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #define TEST_ADD_IMM(src, srcw) \ ((src) == SLJIT_IMM && (srcw) <= 0x7fff7fffl && (srcw) >= -0x80000000l) #define TEST_UI_IMM(src, srcw) \ - ((src) == SLJIT_IMM && !((srcw) & ~0xffffffff)) + ((src) == SLJIT_IMM && !((srcw) & ~(sljit_sw)0xffffffff)) #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ @@ -2141,7 +2142,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } @@ -2575,7 +2576,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { - case SLJIT_NOT_CARRY: + case SLJIT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (4 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2584,7 +2585,7 @@ static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type case SLJIT_ATOMIC_STORED: return (12 << 21) | (2 << 16); - case SLJIT_CARRY: + case SLJIT_NOT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (12 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2675,7 +2676,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile type &= 0xff; if ((type | 0x1) == SLJIT_NOT_CARRY) - PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO) | B(TMP_ZERO))); + PTR_FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO))); /* In PPC, we don't need to touch the arguments. */ if (type < SLJIT_JUMP) @@ -3033,7 +3034,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp } if ((type | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; @@ -3075,7 +3076,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com } if (((type & ~SLJIT_32) | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; diff --git a/deps/sljit/sljit_src/sljitNativeRISCV_64.c b/deps/sljit/sljit_src/sljitNativeRISCV_64.c index 113d1f8..0b8ccab 100644 --- a/deps/sljit/sljit_src/sljitNativeRISCV_64.c +++ b/deps/sljit/sljit_src/sljitNativeRISCV_64.c @@ -76,6 +76,11 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r if (imm <= 0x7fffffffl && imm >= S32_MIN) return load_immediate32(compiler, dst_r, imm); + if (RISCV_HAS_BITMANIP_A(93) && (sljit_uw)imm <= 0xffffffff) { + FAIL_IF(load_immediate(compiler, dst_r, (sljit_s32)imm, tmp_r)); + return push_inst(compiler, ADD_UW | RD(dst_r) | RS1(dst_r) | RS2(TMP_ZERO)); + } + /* Shifted small immediates. */ high = imm; diff --git a/deps/sljit/sljit_src/sljitNativeRISCV_common.c b/deps/sljit/sljit_src/sljitNativeRISCV_common.c index dec12c9..1089bdd 100644 --- a/deps/sljit/sljit_src/sljitNativeRISCV_common.c +++ b/deps/sljit/sljit_src/sljitNativeRISCV_common.c @@ -158,9 +158,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) { /* The arch string is not entirely correct since 'g' contains 'a'. */ #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) - return "RISC-V-32 (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #else /* !SLJIT_CONFIG_RISCV_32 */ - return "RISC-V-64 (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #endif /* SLJIT_CONFIG_RISCV_32 */ } @@ -248,6 +248,7 @@ static const sljit_u8 vreg_map[SLJIT_NUMBER_OF_VECTOR_REGISTERS + 3] = { #define ADD (F7(0x0) | F3(0x0) | OPC(0x33)) #define ADDI (F3(0x0) | OPC(0x13)) +#define ADD_UW (F7(0x4) | F3(0x0) | OPC(0x3b)) #define AND (F7(0x0) | F3(0x7) | OPC(0x33)) #define ANDI (F3(0x7) | OPC(0x13)) #define AUIPC (OPC(0x17)) @@ -1983,6 +1984,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MOV_U32: SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { + if (RISCV_HAS_BITMANIP_A(93)) + return push_inst(compiler, ADD_UW | RD(dst) | RS1(src2) | RS2(TMP_ZERO)); FAIL_IF(push_inst(compiler, SLLI | RD(dst) | RS1(src2) | IMM_I(32))); return push_inst(compiler, SRLI | RD(dst) | RS1(dst) | IMM_I(32)); } @@ -2046,15 +2049,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } - else if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else if (op & SLJIT_SET_Z) FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(src2))); /* Only the zero flag is needed. */ @@ -2088,7 +2089,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl } /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */ - if (is_overflow || carry_src_r != 0) { + if (carry_src_r != 0 || (is_overflow && !(flags & SRC2_IMM))) { if (flags & SRC2_IMM) FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(dst) | IMM_I(src2))); else @@ -2098,6 +2099,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2234,18 +2241,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } else if (op & SLJIT_SET_Z) - FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); - - if (is_overflow || is_carry) - FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); + if (is_carry) + FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + } /* Only the zero flag is needed. */ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK)) { @@ -2276,6 +2283,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2901,7 +2914,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeS390X.c b/deps/sljit/sljit_src/sljitNativeS390X.c index 98f671e..1032ec0 100644 --- a/deps/sljit/sljit_src/sljitNativeS390X.c +++ b/deps/sljit/sljit_src/sljitNativeS390X.c @@ -3163,7 +3163,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/deps/sljit/sljit_src/sljitNativeX86_common.c b/deps/sljit/sljit_src/sljitNativeX86_common.c index 25085a8..840443f 100644 --- a/deps/sljit/sljit_src/sljitNativeX86_common.c +++ b/deps/sljit/sljit_src/sljitNativeX86_common.c @@ -681,6 +681,9 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p sljit_s32 short_jump; sljit_uw label_addr; sljit_uw jump_addr; +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + sljit_uw rel_size; +#endif /* SLJIT_CONFIG_X86_64 */ jump_addr = (sljit_uw)code_ptr; if (!(jump->flags & JUMP_ADDR)) { @@ -692,7 +695,8 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p label_addr = jump->u.target - (sljit_uw)executable_offset; #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - if ((sljit_sw)(label_addr - (jump_addr + 6)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + 5)) < HALFWORD_MIN) + rel_size = (type < SLJIT_JUMP) ? 6 : 5; + if ((sljit_sw)(label_addr - (jump_addr + rel_size)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + rel_size)) < HALFWORD_MIN) return detect_far_jump_type(jump, code_ptr); #endif /* SLJIT_CONFIG_X86_64 */ @@ -1067,7 +1071,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_COPY_F32: case SLJIT_HAS_COPY_F64: case SLJIT_HAS_ATOMIC: + return 1; + case SLJIT_HAS_MEMORY_BARRIER: +#if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2) + if (cpu_feature_list == 0) + get_cpu_features(); + return (cpu_feature_list & CPU_FEATURE_SSE2) != 0; +#endif return 1; #if !(defined SLJIT_IS_FPU_AVAILABLE) || SLJIT_IS_FPU_AVAILABLE @@ -3036,7 +3047,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/doc/html/README.txt b/doc/html/README.txt index 593bab2..3adf495 100644 --- a/doc/html/README.txt +++ b/doc/html/README.txt @@ -519,13 +519,14 @@ system. The following are installed (file names are all relative to the *.html (lots more pages, hyperlinked from index.html) Text file documentation (share/doc/pcre2): - AUTHORS + AUTHORS.md COPYING ChangeLog - LICENCE + LICENCE.md NEWS README - SECURITY + SECURITY.md + SUPPORT-LIFECYCLE.md pcre2.txt (a concatenation of the man(3) pages) pcre2test.txt the pcre2test man page pcre2grep.txt the pcre2grep man page @@ -920,6 +921,7 @@ The distribution should contain the files listed below. LICENCE.md conditions for the use of PCRE2 COPYING the same, using GNU's standard name SECURITY.md information on reporting vulnerabilities + SUPPORT-LIFECYCLE.md information on the support policy Makefile.in ) template for Unix Makefile, which is built by ) "configure" Makefile.am ) the automake input that was used to create @@ -962,10 +964,10 @@ The distribution should contain the files listed below. testdata/testoutput* expected test results testdata/grep* input and output for pcre2grep tests testdata/* other supporting test files - src/libpcre2-8.sym ) - src/libpcre2-16.sym ) symbol version scripts for the GNU and Sun linkers - src/libpcre2-32.sym ) - src/libpcre2-posix.sym ) + src/libpcre2-8.sym.in ) + src/libpcre2-16.sym.in ) symbol version script templates for the + src/libpcre2-32.sym.in ) GNU, BSD and Sun linkers + src/libpcre2-posix.sym.in ) (D) Auxiliary files for CMake support @@ -991,6 +993,7 @@ The distribution should contain the files listed below. BUILD.bazel ) files used by the Bazel MODULE.bazel ) build system build.zig file used by zig's build system + build.zig.zon file used by zig's package manager (G) Auxiliary files for building PCRE2 under OpenVMS @@ -999,7 +1002,7 @@ The distribution should contain the files listed below. vms/pcre2.h_patch ) vms/stdint.h ) -============================= -Last updated: 15 October 2025 -============================= +============================ +Last updated: 08 August 2026 +============================ diff --git a/doc/html/pcre2api.html b/doc/html/pcre2api.html index 52f013e..8b6f7fc 100644 --- a/doc/html/pcre2api.html +++ b/doc/html/pcre2api.html @@ -1374,14 +1374,18 @@ documentation for more details.
   PCRE2_CONFIG_JITTARGET
 
-The where argument should point to a buffer that is at least 64 code -units long. (The exact length required can be found by calling -pcre2_config() with where set to NULL.) The buffer is filled with a -string that contains the name of the architecture for which the JIT compiler is -configured, for example "x86 32bit (little endian + unaligned)". If JIT support -is not available, PCRE2_ERROR_BADOPTION is returned, otherwise the number of -code units used is returned. This is the length of the string, plus one unit -for the terminating zero. +The where argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 128 code units of buffer +capacity. However, this requirement is not guaranteed to be maintained, so +applications should call pcre2_config() with where set to NULL to +receive the required buffer size, then assert or allocate a suitably-size buffer +for a second call to pcre2_config(). The buffer is filled with a string +that contains the name of the architecture for which the JIT compiler is +configured at build time, for example, a 64-bit ARM CPU that supports the +Armv8.1 extension writes "ARM-64 (LSE) 64bit (little endian + unaligned)". If +JIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the +number of code units used is returned. This is the length of the string plus one +unit for the terminating zero.
   PCRE2_CONFIG_LINKSIZE
 
@@ -1450,13 +1454,15 @@ below.
   PCRE2_CONFIG_UNICODE_VERSION
 
-The where argument should point to a buffer that is at least 24 code -units long. (The exact length required can be found by calling -pcre2_config() with where set to NULL.) If PCRE2 has been compiled -without Unicode support, the buffer is filled with the text "Unicode not -supported". Otherwise, the Unicode version string (for example, "8.0.0") is -inserted. The number of code units used is returned. This is the length of the -string plus one unit for the terminating zero. +The where argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 24 code units of buffer +capacity. However, applications should call pcre2_config() with +where set to NULL to receive the required buffer size, then assert or +allocate a suitably-size buffer for a second call to pcre2_config(). If +PCRE2 has been compiled without Unicode support, the buffer is filled with the +text "Unicode not supported". Otherwise, the Unicode version string (for +example, "8.0.0") is written. The number of code units used is returned. This is +the length of the string plus one unit for the terminating zero.
   PCRE2_CONFIG_UNICODE
 
@@ -1465,12 +1471,14 @@ available; otherwise it is set to zero. Unicode support implies UTF support.
   PCRE2_CONFIG_VERSION
 
-The where argument should point to a buffer that is at least 24 code -units long. (The exact length required can be found by calling -pcre2_config() with where set to NULL.) The buffer is filled with -the PCRE2 version string, zero-terminated. The number of code units used is -returned. This is the length of the string plus one unit for the terminating -zero. +The where argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 24 code units of buffer +capacity. However, applications should call pcre2_config() with +where set to NULL to receive the required buffer size, then assert or +allocate a suitably-size buffer for a second call to pcre2_config(). The +buffer is filled with the PCRE2 version string, zero-terminated. The number of +code units used is returned. This is the length of the string plus one unit for +the terminating zero.

COMPILING A PATTERN

@@ -3526,7 +3534,7 @@ A common task for applications is to implement "global" matching behaviour, for example, replacing all matches in the subject; splitting the subject on all matches; or simply counting the number of matches. The pcre2_next_match() function helps with this task by providing the appropriate parameters for the -next match attempt (available since PCRE2 10.46). +next match attempt (available since PCRE2 10.47).

First, a match attempt should be made using one of the matching functions @@ -3917,6 +3925,15 @@ output buffer. Substitution callouts (see can be used to separate them if necessary.

+Partial matching is supported, with limitations: if matching succeeds but with a +partial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When +partial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed), +then PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else +PCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items +($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching, +even if a complete match is found. +

+

The outlengthptr argument of pcre2_substitute() must point to a variable that contains the length, in code units, of the output buffer. If the function is successful, the value is updated to contain the length in code @@ -4623,7 +4640,7 @@ Cambridge, England.

REVISION

-Last updated: 19 October 2025 +Last updated: 08 December 2025
Copyright © 1997-2024 University of Cambridge.
diff --git a/doc/html/pcre2jit.html b/doc/html/pcre2jit.html index cc26cc0..c3f18f4 100644 --- a/doc/html/pcre2jit.html +++ b/doc/html/pcre2jit.html @@ -460,10 +460,11 @@ processed by pcre2_jit_compile()). The fast path function is called pcre2_jit_match(), and it takes exactly the same arguments as pcre2_match(). However, the subject string must be specified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported -option bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as -is the PCRE2_NO_JIT option. The return values are also the same as for -pcre2_match(), plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial -or complete) is requested that was not compiled. +option bits (for example, PCRE2_ANCHORED, PCRE2_ENDANCHORED, and +PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the PCRE2_NO_JIT option. The +return values are also the same as for pcre2_match(), plus +PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested +that was not compiled.

When you call pcre2_match(), as well as testing for invalid options, a @@ -496,7 +497,7 @@ Cambridge, England.

REVISION

-Last updated: 22 August 2024 +Last updated: 08 August 2026
Copyright © 1997-2024 University of Cambridge.
diff --git a/doc/html/pcre2partial.html b/doc/html/pcre2partial.html index 529cc7b..acce666 100644 --- a/doc/html/pcre2partial.html +++ b/doc/html/pcre2partial.html @@ -388,6 +388,20 @@ two buffers. If a partial match at offset n in the first buffer is followed by "no match" when PCRE2_DFA_RESTART is used on the second buffer, you can then try a new match starting at offset n+1 in the first buffer.

+

+Therefore, PCRE2_DFA_RESTART does not remove the need to keep earlier subject +data. In order to perform a bumpalong and continue matching at the next +character, all subject data from the current match start must be retained, +together with enough preceding data to satisfy the requirements of lookbehind +assertions (remembering as above that PCRE2_INFO_MAXLOOKBEHIND only describes +the buffer requirement of a single lookbehind, and nested lookbehinds can read +back further from the match start). This makes streaming match processing +using PCRE2_DFA_RESTART challenging, and the application cannot easily set a +bound on the number of chunks to buffer. For multi-segment searching that is +intended to produce the same result as searching the whole subject, it is +usually simpler to avoid PCRE2_DFA_RESTART and run a fresh match, using either +matching function, over the retained text. +

AUTHOR

Philip Hazel @@ -399,7 +413,7 @@ Cambridge, England.

REVISION

-Last updated: 27 November 2024 +Last updated: 16 August 2026
Copyright © 1997-2019 University of Cambridge.
diff --git a/doc/html/pcre2pattern.html b/doc/html/pcre2pattern.html index a18a297..9ff064e 100644 --- a/doc/html/pcre2pattern.html +++ b/doc/html/pcre2pattern.html @@ -3451,7 +3451,7 @@ below. Recursion and subroutines with returned capture groups

-Since PCRE2 10.46, recursion and subroutine calls may also specify a list of +Since PCRE2 10.47, recursion and subroutine calls may also specify a list of capture groups to return. This is a PCRE2 syntax extension not supported by Perl. The pattern matching recurses into the referenced expression as described above, however, when the recursion returns to the calling expression the @@ -4183,7 +4183,7 @@ Cambridge, England.

REVISION

-Last updated: 03 September 2025 +Last updated: 25 October 2025
Copyright © 1997-2024 University of Cambridge.
diff --git a/doc/html/pcre2test.html b/doc/html/pcre2test.html index cc9136a..208d660 100644 --- a/doc/html/pcre2test.html +++ b/doc/html/pcre2test.html @@ -214,9 +214,11 @@ If an unknown option is given, an error message is output; the exit code is 0.

--colo[u]r[=<always,auto,never>] -By default, the output is coloured if the output file is a terminal (auto). -Force or suppress output of ANSI colour escapes with always and never -respectively. +With auto, the output is coloured if the output is to a terminal. Force or +suppress output of ANSI colour escapes with always (or no specifier +provided) and never respectively. If no colour option is provided, the +default is auto, unless the NO_COLOR environment variable is defined and +non-empty.

-d @@ -861,7 +863,7 @@ when it can never be used. The framesize modifier shows the size, in bytes, of each storage frame used by pcre2_match() for handling backtracking. The size depends on the number of capturing parentheses in the pattern. A vector of these frames is -used at matching time; its overall size is shown when the heaframes_size +used at matching time; its overall size is shown when the heapframes_size subject modifier is set.

@@ -2303,7 +2305,7 @@ Cambridge, England.

REVISION

-Last updated: 12 October 2025 +Last updated: 22 August 2026
Copyright © 1997-2024 University of Cambridge.
diff --git a/doc/pcre2-config.1 b/doc/pcre2-config.1 index c119a11..e72663f 100644 --- a/doc/pcre2-config.1 +++ b/doc/pcre2-config.1 @@ -1,4 +1,4 @@ -.TH PCRE2-CONFIG 1 "22 February 2025" "PCRE2 10.47" +.TH PCRE2-CONFIG 1 "22 February 2025" "PCRE2 10.48-RC1" .SH NAME pcre2-config - program to return PCRE2 configuration .SH SYNOPSIS diff --git a/doc/pcre2-config.txt b/doc/pcre2-config.txt index 74592eb..c134a6a 100644 --- a/doc/pcre2-config.txt +++ b/doc/pcre2-config.txt @@ -81,4 +81,4 @@ REVISION Last updated: 22 February 2025 -PCRE2 10.47 22 February 2025 PCRE2-CONFIG(1) +PCRE2 10.48-RC1 22 February 2025 PCRE2-CONFIG(1) diff --git a/doc/pcre2.3 b/doc/pcre2.3 index 1c3d9d2..0698b67 100644 --- a/doc/pcre2.3 +++ b/doc/pcre2.3 @@ -1,4 +1,4 @@ -.TH PCRE2 3 "22 February 2025" "PCRE2 10.47" +.TH PCRE2 3 "22 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH INTRODUCTION diff --git a/doc/pcre2.txt b/doc/pcre2.txt index b0b564c..f934cd2 100644 --- a/doc/pcre2.txt +++ b/doc/pcre2.txt @@ -189,7 +189,7 @@ REVISION Copyright (c) 1997-2021 University of Cambridge. -PCRE2 10.47 22 February 2025 PCRE2(3) +PCRE2 10.48-RC1 22 February 2025 PCRE2(3) ------------------------------------------------------------------------------ @@ -1364,14 +1364,19 @@ CHECKING BUILD-TIME OPTIONS PCRE2_CONFIG_JITTARGET - The where argument should point to a buffer that is at least 64 code - units long. (The exact length required can be found by calling - pcre2_config() with where set to NULL.) The buffer is filled with a - string that contains the name of the architecture for which the JIT - compiler is configured, for example "x86 32bit (little endian + un- - aligned)". If JIT support is not available, PCRE2_ERROR_BADOPTION is - returned, otherwise the number of code units used is returned. This is - the length of the string, plus one unit for the terminating zero. + The where argument should point to a code-unit-aligned buffer. All pre- + vious versions of PCRE2 have required no more than 128 code units of + buffer capacity. However, this requirement is not guaranteed to be + maintained, so applications should call pcre2_config() with where set + to NULL to receive the required buffer size, then assert or allocate a + suitably-size buffer for a second call to pcre2_config(). The buffer is + filled with a string that contains the name of the architecture for + which the JIT compiler is configured at build time, for example, a + 64-bit ARM CPU that supports the Armv8.1 extension writes "ARM-64 (LSE) + 64bit (little endian + unaligned)". If JIT support is not available, + PCRE2_ERROR_BADOPTION is returned; otherwise the number of code units + used is returned. This is the length of the string plus one unit for + the terminating zero. PCRE2_CONFIG_LINKSIZE @@ -1441,13 +1446,16 @@ CHECKING BUILD-TIME OPTIONS PCRE2_CONFIG_UNICODE_VERSION - The where argument should point to a buffer that is at least 24 code - units long. (The exact length required can be found by calling - pcre2_config() with where set to NULL.) If PCRE2 has been compiled - without Unicode support, the buffer is filled with the text "Unicode - not supported". Otherwise, the Unicode version string (for example, - "8.0.0") is inserted. The number of code units used is returned. This - is the length of the string plus one unit for the terminating zero. + The where argument should point to a code-unit-aligned buffer. All pre- + vious versions of PCRE2 have required no more than 24 code units of + buffer capacity. However, applications should call pcre2_config() with + where set to NULL to receive the required buffer size, then assert or + allocate a suitably-size buffer for a second call to pcre2_config(). If + PCRE2 has been compiled without Unicode support, the buffer is filled + with the text "Unicode not supported". Otherwise, the Unicode version + string (for example, "8.0.0") is written. The number of code units used + is returned. This is the length of the string plus one unit for the + terminating zero. PCRE2_CONFIG_UNICODE @@ -1457,12 +1465,14 @@ CHECKING BUILD-TIME OPTIONS PCRE2_CONFIG_VERSION - The where argument should point to a buffer that is at least 24 code - units long. (The exact length required can be found by calling - pcre2_config() with where set to NULL.) The buffer is filled with the - PCRE2 version string, zero-terminated. The number of code units used is - returned. This is the length of the string plus one unit for the termi- - nating zero. + The where argument should point to a code-unit-aligned buffer. All pre- + vious versions of PCRE2 have required no more than 24 code units of + buffer capacity. However, applications should call pcre2_config() with + where set to NULL to receive the required buffer size, then assert or + allocate a suitably-size buffer for a second call to pcre2_config(). + The buffer is filled with the PCRE2 version string, zero-terminated. + The number of code units used is returned. This is the length of the + string plus one unit for the terminating zero. COMPILING A PATTERN @@ -1477,107 +1487,107 @@ COMPILING A PATTERN pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *code); - The pcre2_compile() function compiles a pattern into an internal form. - The pattern is defined by a pointer to a string of code units and a + The pcre2_compile() function compiles a pattern into an internal form. + The pattern is defined by a pointer to a string of code units and a length in code units. If the pattern is zero-terminated, the length can - be specified as PCRE2_ZERO_TERMINATED. A NULL pattern pointer with a - length of zero is treated as an empty string (NULL with a non-zero - length causes an error return). The function returns a pointer to a + be specified as PCRE2_ZERO_TERMINATED. A NULL pattern pointer with a + length of zero is treated as an empty string (NULL with a non-zero + length causes an error return). The function returns a pointer to a block of memory that contains the compiled pattern and related data, or NULL if an error occurred. - If the compile context argument ccontext is NULL, memory for the com- - piled pattern is obtained by calling malloc(). Otherwise, it is ob- + If the compile context argument ccontext is NULL, memory for the com- + piled pattern is obtained by calling malloc(). Otherwise, it is ob- tained from the same memory function that was used for the compile con- text. The caller must free the memory by calling pcre2_code_free() when it is no longer needed. If pcre2_code_free() is called with a NULL ar- gument, it returns immediately, without doing anything. The function pcre2_code_copy() makes a copy of the compiled code in new - memory, using the same memory allocator as was used for the original. - However, if the code has been processed by the JIT compiler (see be- - low), the JIT information cannot be copied (because it is position-de- - pendent). The new copy can initially be used only for non-JIT match- - ing, though it can be passed to pcre2_jit_compile() if required. If + memory, using the same memory allocator as was used for the original. + However, if the code has been processed by the JIT compiler (see be- + low), the JIT information cannot be copied (because it is position-de- + pendent). The new copy can initially be used only for non-JIT match- + ing, though it can be passed to pcre2_jit_compile() if required. If pcre2_code_copy() is called with a NULL argument, it returns NULL. The pcre2_code_copy() function provides a way for individual threads in - a multithreaded application to acquire a private copy of shared com- - piled code. However, it does not make a copy of the character tables - used by the compiled pattern; the new pattern code points to the same - tables as the original code. (See "Locale Support" below for details - of these character tables.) In many applications the same tables are - used throughout, so this behaviour is appropriate. Nevertheless, there + a multithreaded application to acquire a private copy of shared com- + piled code. However, it does not make a copy of the character tables + used by the compiled pattern; the new pattern code points to the same + tables as the original code. (See "Locale Support" below for details + of these character tables.) In many applications the same tables are + used throughout, so this behaviour is appropriate. Nevertheless, there are occasions when a copy of a compiled pattern and the relevant tables - are needed. The pcre2_code_copy_with_tables() provides this facility. - Copies of both the code and the tables are made, with the new code - pointing to the new tables. The memory for the new tables is automati- - cally freed when pcre2_code_free() is called for the new copy of the - compiled code. If pcre2_code_copy_with_tables() is called with a NULL + are needed. The pcre2_code_copy_with_tables() provides this facility. + Copies of both the code and the tables are made, with the new code + pointing to the new tables. The memory for the new tables is automati- + cally freed when pcre2_code_free() is called for the new copy of the + compiled code. If pcre2_code_copy_with_tables() is called with a NULL argument, it returns NULL. - NOTE: When one of the matching functions is called, pointers to the + NOTE: When one of the matching functions is called, pointers to the compiled pattern and the subject string are set in the match data block - so that they can be referenced by the substring extraction functions - after a successful match. After running a match, you must not free a - compiled pattern or a subject string until after all operations on the - match data block have taken place, unless, in the case of the subject - string, you have used the PCRE2_COPY_MATCHED_SUBJECT option, which is - described in the section entitled "Option bits for pcre2_match()" be- + so that they can be referenced by the substring extraction functions + after a successful match. After running a match, you must not free a + compiled pattern or a subject string until after all operations on the + match data block have taken place, unless, in the case of the subject + string, you have used the PCRE2_COPY_MATCHED_SUBJECT option, which is + described in the section entitled "Option bits for pcre2_match()" be- low. - The options argument for pcre2_compile() contains various bit settings - that affect the compilation. It should be zero if none of them are re- - quired. The available options are described below. Some of them (in - particular, those that are compatible with Perl, but some others as - well) can also be set and unset from within the pattern (see the de- + The options argument for pcre2_compile() contains various bit settings + that affect the compilation. It should be zero if none of them are re- + quired. The available options are described below. Some of them (in + particular, those that are compatible with Perl, but some others as + well) can also be set and unset from within the pattern (see the de- tailed description in the pcre2pattern documentation). - For those options that can be different in different parts of the pat- - tern, the contents of the options argument specifies their settings at - the start of compilation. The PCRE2_ANCHORED, PCRE2_ENDANCHORED, and - PCRE2_NO_UTF_CHECK options can be set at the time of matching as well + For those options that can be different in different parts of the pat- + tern, the contents of the options argument specifies their settings at + the start of compilation. The PCRE2_ANCHORED, PCRE2_ENDANCHORED, and + PCRE2_NO_UTF_CHECK options can be set at the time of matching as well as at compile time. Some additional options and less frequently required compile-time para- - meters (for example, the newline setting) can be provided in a compile + meters (for example, the newline setting) can be provided in a compile context (as described above). If errorcode or erroroffset is NULL, pcre2_compile() returns NULL imme- - diately. Otherwise, the variables to which these point are set to an + diately. Otherwise, the variables to which these point are set to an error code and an offset (number of code units) within the pattern, re- spectively, when pcre2_compile() returns NULL because a compilation er- ror has occurred. There are over 100 positive error codes that pcre2_compile() may return if it finds an error in the pattern. There are also some negative error - codes that are used for invalid UTF strings when validity checking is - in force. These are the same as given by pcre2_match() and + codes that are used for invalid UTF strings when validity checking is + in force. These are the same as given by pcre2_match() and pcre2_dfa_match(), and are described in the pcre2unicode documentation. - There is no separate documentation for the positive error codes, be- - cause the textual error messages that are obtained by calling the + There is no separate documentation for the positive error codes, be- + cause the textual error messages that are obtained by calling the pcre2_get_error_message() function (see "Obtaining a textual error mes- - sage" below) should be self-explanatory. Macro names starting with - PCRE2_ERROR_ are defined for both positive and negative error codes in - pcre2.h. When compilation is successful errorcode is set to a value - that returns the message "no error" if passed to pcre2_get_error_mes- + sage" below) should be self-explanatory. Macro names starting with + PCRE2_ERROR_ are defined for both positive and negative error codes in + pcre2.h. When compilation is successful errorcode is set to a value + that returns the message "no error" if passed to pcre2_get_error_mes- sage(). The value returned in erroroffset is an indication of where in the pat- - tern an error occurred. When there is no error, zero is returned. A - non-zero value is not necessarily the furthest point in the pattern - that was read. For example, after the error "lookbehind assertion is - not fixed length", the error offset points to the start of the failing + tern an error occurred. When there is no error, zero is returned. A + non-zero value is not necessarily the furthest point in the pattern + that was read. For example, after the error "lookbehind assertion is + not fixed length", the error offset points to the start of the failing assertion. For an invalid UTF-8 or UTF-16 string, the offset is that of the first code unit of the failing character. - Some errors are not detected until the whole pattern has been scanned; - in these cases, the offset passed back is the length of the pattern. - Note that the offset is in code units, not characters, even in a UTF + Some errors are not detected until the whole pattern has been scanned; + in these cases, the offset passed back is the length of the pattern. + Note that the offset is in code units, not characters, even in a UTF mode. It may sometimes point into the middle of a UTF-8 or UTF-16 char- acter. - This code fragment shows a typical straightforward call to pcre2_com- + This code fragment shows a typical straightforward call to pcre2_com- pile(): pcre2_code *re; @@ -1594,471 +1604,471 @@ COMPILING A PATTERN Main compile options - The following names for option bits are defined in the pcre2.h header + The following names for option bits are defined in the pcre2.h header file: PCRE2_ANCHORED If this bit is set, the pattern is forced to be "anchored", that is, it - is constrained to match only at the first matching point in the string - that is being searched (the "subject string"). This effect can also be - achieved by appropriate constructs in the pattern itself, which is the + is constrained to match only at the first matching point in the string + that is being searched (the "subject string"). This effect can also be + achieved by appropriate constructs in the pattern itself, which is the only way to do it in Perl. PCRE2_ALLOW_EMPTY_CLASS - By default, for compatibility with Perl, a closing square bracket that - immediately follows an opening one is treated as a data character for - the class. When PCRE2_ALLOW_EMPTY_CLASS is set, it terminates the + By default, for compatibility with Perl, a closing square bracket that + immediately follows an opening one is treated as a data character for + the class. When PCRE2_ALLOW_EMPTY_CLASS is set, it terminates the class, which therefore contains no characters and so can never match. PCRE2_ALT_BSUX - This option request alternative handling of three escape sequences, - which makes PCRE2's behaviour more like ECMAscript (aka JavaScript). + This option request alternative handling of three escape sequences, + which makes PCRE2's behaviour more like ECMAscript (aka JavaScript). When it is set: (1) \U matches an upper case "U" character; by default \U causes a com- pile time error (Perl uses \U to upper case subsequent characters). (2) \u matches a lower case "u" character unless it is followed by four - hexadecimal digits, in which case the hexadecimal number defines the - code point to match. By default, \u causes a compile time error (Perl + hexadecimal digits, in which case the hexadecimal number defines the + code point to match. By default, \u causes a compile time error (Perl uses it to upper case the following character). - (3) \x matches a lower case "x" character unless it is followed by two - hexadecimal digits, in which case the hexadecimal number defines the - code point to match. By default, as in Perl, a hexadecimal number is + (3) \x matches a lower case "x" character unless it is followed by two + hexadecimal digits, in which case the hexadecimal number defines the + code point to match. By default, as in Perl, a hexadecimal number is always expected after \x, but it may have one or two digits. ECMAscript 6 added additional functionality to \u. This can be accessed - using the PCRE2_EXTRA_ALT_BSUX extra option (see "Extra compile op- + using the PCRE2_EXTRA_ALT_BSUX extra option (see "Extra compile op- tions" below). Note that this alternative escape handling applies only - to patterns. Neither of these options affects the processing of re- + to patterns. Neither of these options affects the processing of re- placement strings passed to pcre2_substitute(). PCRE2_ALT_CIRCUMFLEX In multiline mode (when PCRE2_MULTILINE is set), the circumflex - metacharacter matches at the start of the subject (unless PCRE2_NOTBOL - is set), and also after any internal newline. However, it does not + metacharacter matches at the start of the subject (unless PCRE2_NOTBOL + is set), and also after any internal newline. However, it does not match after a newline at the end of the subject, for compatibility with - Perl. If you want a multiline circumflex also to match after a termi- + Perl. If you want a multiline circumflex also to match after a termi- nating newline, you must set PCRE2_ALT_CIRCUMFLEX. PCRE2_ALT_EXTENDED_CLASS - Alters the parsing of character classes to follow the extended syntax + Alters the parsing of character classes to follow the extended syntax described by Unicode UTS#18. The PCRE2_ALT_EXTENDED_CLASS option has no - impact on the behaviour of the Perl-specific "(?[...])" syntax for ex- - tended classes, but instead enables the alternative syntax of extended - class behaviour inside ordinary "[...]" character classes. See the - pcre2pattern documentation for details of the character classes sup- + impact on the behaviour of the Perl-specific "(?[...])" syntax for ex- + tended classes, but instead enables the alternative syntax of extended + class behaviour inside ordinary "[...]" character classes. See the + pcre2pattern documentation for details of the character classes sup- ported. PCRE2_ALT_VERBNAMES - By default, for compatibility with Perl, the name in any verb sequence - such as (*MARK:NAME) is any sequence of characters that does not in- - clude a closing parenthesis. The name is not processed in any way, and - it is not possible to include a closing parenthesis in the name. How- - ever, if the PCRE2_ALT_VERBNAMES option is set, normal backslash pro- - cessing is applied to verb names and only an unescaped closing paren- - thesis terminates the name. A closing parenthesis can be included in a - name either as \) or between \Q and \E. If the PCRE2_EXTENDED or - PCRE2_EXTENDED_MORE option is set with PCRE2_ALT_VERBNAMES, unescaped + By default, for compatibility with Perl, the name in any verb sequence + such as (*MARK:NAME) is any sequence of characters that does not in- + clude a closing parenthesis. The name is not processed in any way, and + it is not possible to include a closing parenthesis in the name. How- + ever, if the PCRE2_ALT_VERBNAMES option is set, normal backslash pro- + cessing is applied to verb names and only an unescaped closing paren- + thesis terminates the name. A closing parenthesis can be included in a + name either as \) or between \Q and \E. If the PCRE2_EXTENDED or + PCRE2_EXTENDED_MORE option is set with PCRE2_ALT_VERBNAMES, unescaped white space in verb names is skipped and #-comments are recognized, ex- actly as in the rest of the pattern. PCRE2_AUTO_CALLOUT - If this bit is set, pcre2_compile() automatically inserts callout - items, all with number 255, before each pattern item, except immedi- - ately before or after an explicit callout in the pattern. For discus- + If this bit is set, pcre2_compile() automatically inserts callout + items, all with number 255, before each pattern item, except immedi- + ately before or after an explicit callout in the pattern. For discus- sion of the callout facility, see the pcre2callout documentation. PCRE2_CASELESS - If this bit is set, letters in the pattern match both upper and lower - case letters in the subject. It is equivalent to Perl's /i option, and - it can be changed within a pattern by a (?i) option setting. If either - PCRE2_UTF or PCRE2_UCP is set, Unicode properties are used for all - characters with more than one other case, and for all characters whose + If this bit is set, letters in the pattern match both upper and lower + case letters in the subject. It is equivalent to Perl's /i option, and + it can be changed within a pattern by a (?i) option setting. If either + PCRE2_UTF or PCRE2_UCP is set, Unicode properties are used for all + characters with more than one other case, and for all characters whose code points are greater than U+007F. Note that there are two ASCII characters, K and S, that, in addition to - their lower case ASCII equivalents, are case-equivalent with U+212A + their lower case ASCII equivalents, are case-equivalent with U+212A (Kelvin sign) and U+017F (long S) respectively. If you do not want this - case equivalence, you can suppress it by setting PCRE2_EXTRA_CASE- + case equivalence, you can suppress it by setting PCRE2_EXTRA_CASE- LESS_RESTRICT. - One language family, Turkish and Azeri, has its own case-insensitivity - rules, which can be selected by setting PCRE2_EXTRA_TURKISH_CASING. - This alters the behaviour of the 'i', 'I', U+0130 (capital I with dot + One language family, Turkish and Azeri, has its own case-insensitivity + rules, which can be selected by setting PCRE2_EXTRA_TURKISH_CASING. + This alters the behaviour of the 'i', 'I', U+0130 (capital I with dot above), and U+0131 (small dotless i) characters. For lower valued characters with only one other case, a lookup table is - used for speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup + used for speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup table is used for all code points less than 256, and higher code points (available only in 16-bit or 32-bit mode) are treated as not having an- other case. From release 10.45 PCRE2_CASELESS also affects what some of the letter- - related Unicode property escapes (\p and \P) match. The properties Lu + related Unicode property escapes (\p and \P) match. The properties Lu (upper case letter), Ll (lower case letter), and Lt (title case letter) are all treated as LC (cased letter) when PCRE2_CASELESS is set. PCRE2_DOLLAR_ENDONLY - If this bit is set, a dollar metacharacter in the pattern matches only - at the end of the subject string. Without this option, a dollar also - matches immediately before a newline at the end of the string (but not - before any other newlines). The PCRE2_DOLLAR_ENDONLY option is ignored - if PCRE2_MULTILINE is set. There is no equivalent to this option in + If this bit is set, a dollar metacharacter in the pattern matches only + at the end of the subject string. Without this option, a dollar also + matches immediately before a newline at the end of the string (but not + before any other newlines). The PCRE2_DOLLAR_ENDONLY option is ignored + if PCRE2_MULTILINE is set. There is no equivalent to this option in Perl, and no way to set it within a pattern. PCRE2_DOTALL - If this bit is set, a dot metacharacter in the pattern matches any - character, including one that indicates a newline. However, it only + If this bit is set, a dot metacharacter in the pattern matches any + character, including one that indicates a newline. However, it only ever matches one character, even if newlines are coded as CRLF. Without this option, a dot does not match when the current position in the sub- - ject is at a newline. This option is equivalent to Perl's /s option, + ject is at a newline. This option is equivalent to Perl's /s option, and it can be changed within a pattern by a (?s) option setting. A neg- - ative class such as [^a] always matches newline characters, and the \N - escape sequence always matches a non-newline character, independent of + ative class such as [^a] always matches newline characters, and the \N + escape sequence always matches a non-newline character, independent of the setting of PCRE2_DOTALL. PCRE2_DUPNAMES - If this bit is set, names used to identify capture groups need not be - unique. This can be helpful for certain types of pattern when it is - known that only one instance of the named group can ever be matched. - There are more details of named capture groups below; see also the + If this bit is set, names used to identify capture groups need not be + unique. This can be helpful for certain types of pattern when it is + known that only one instance of the named group can ever be matched. + There are more details of named capture groups below; see also the pcre2pattern documentation. PCRE2_ENDANCHORED - If this bit is set, the end of any pattern match must be right at the + If this bit is set, the end of any pattern match must be right at the end of the string being searched (the "subject string"). If the pattern match succeeds by reaching (*ACCEPT), but does not reach the end of the - subject, the match fails at the current starting point. For unanchored - patterns, a new match is then tried at the next starting point. How- + subject, the match fails at the current starting point. For unanchored + patterns, a new match is then tried at the next starting point. How- ever, if the match succeeds by reaching the end of the pattern, but not - the end of the subject, backtracking occurs and an alternative match + the end of the subject, backtracking occurs and an alternative match may be found. Consider these two patterns: .(*ACCEPT)|.. .|.. - If matched against "abc" with PCRE2_ENDANCHORED set, the first matches - "c" whereas the second matches "bc". The effect of PCRE2_ENDANCHORED - can also be achieved by appropriate constructs in the pattern itself, + If matched against "abc" with PCRE2_ENDANCHORED set, the first matches + "c" whereas the second matches "bc". The effect of PCRE2_ENDANCHORED + can also be achieved by appropriate constructs in the pattern itself, which is the only way to do it in Perl. For DFA matching with pcre2_dfa_match(), PCRE2_ENDANCHORED applies only - to the first (that is, the longest) matched string. Other parallel - matches, which are necessarily substrings of the first one, must obvi- + to the first (that is, the longest) matched string. Other parallel + matches, which are necessarily substrings of the first one, must obvi- ously end before the end of the subject. PCRE2_EXTENDED - If this bit is set, most white space characters in the pattern are to- - tally ignored except when escaped, inside a character class, or inside - a \Q...\E sequence. However, white space is not allowed within se- - quences such as (?> that introduce various parenthesized groups, nor - within numerical quantifiers such as {1,3}. Ignorable white space is - permitted between an item and a following quantifier and between a - quantifier and a following + that indicates possessiveness. PCRE2_EX- - TENDED is equivalent to Perl's /x option, and it can be changed within + If this bit is set, most white space characters in the pattern are to- + tally ignored except when escaped, inside a character class, or inside + a \Q...\E sequence. However, white space is not allowed within se- + quences such as (?> that introduce various parenthesized groups, nor + within numerical quantifiers such as {1,3}. Ignorable white space is + permitted between an item and a following quantifier and between a + quantifier and a following + that indicates possessiveness. PCRE2_EX- + TENDED is equivalent to Perl's /x option, and it can be changed within a pattern by a (?x) option setting. - When PCRE2 is compiled without Unicode support, PCRE2_EXTENDED recog- - nizes as white space only those characters with code points less than + When PCRE2 is compiled without Unicode support, PCRE2_EXTENDED recog- + nizes as white space only those characters with code points less than 256 that are flagged as white space in its low-character table. The ta- ble is normally created by pcre2_maketables(), which uses the isspace() - function to identify space characters. In most ASCII environments, the - relevant characters are those with code points 0x0009 (tab), 0x000A - (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D (carriage + function to identify space characters. In most ASCII environments, the + relevant characters are those with code points 0x0009 (tab), 0x000A + (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D (carriage return), and 0x0020 (space). When PCRE2 is compiled with Unicode support, in addition to these char- - acters, five more Unicode "Pattern White Space" characters are recog- + acters, five more Unicode "Pattern White Space" characters are recog- nized by PCRE2_EXTENDED. These are U+0085 (next line), U+200E (left-to- - right mark), U+200F (right-to-left mark), U+2028 (line separator), and - U+2029 (paragraph separator). This set of characters is the same as - recognized by Perl's /x option. Note that the horizontal and vertical - space characters that are matched by the \h and \v escapes in patterns + right mark), U+200F (right-to-left mark), U+2028 (line separator), and + U+2029 (paragraph separator). This set of characters is the same as + recognized by Perl's /x option. Note that the horizontal and vertical + space characters that are matched by the \h and \v escapes in patterns are a much bigger set. - As well as ignoring most white space, PCRE2_EXTENDED also causes char- - acters between an unescaped # outside a character class and the next - newline, inclusive, to be ignored, which makes it possible to include + As well as ignoring most white space, PCRE2_EXTENDED also causes char- + acters between an unescaped # outside a character class and the next + newline, inclusive, to be ignored, which makes it possible to include comments inside complicated patterns. Note that the end of this type of - comment is a literal newline sequence in the pattern; escape sequences + comment is a literal newline sequence in the pattern; escape sequences that happen to represent a newline do not count. Which characters are interpreted as newlines can be specified by a set- - ting in the compile context that is passed to pcre2_compile() or by a - special sequence at the start of the pattern, as described in the sec- - tion entitled "Newline conventions" in the pcre2pattern documentation. + ting in the compile context that is passed to pcre2_compile() or by a + special sequence at the start of the pattern, as described in the sec- + tion entitled "Newline conventions" in the pcre2pattern documentation. A default is defined when PCRE2 is built. PCRE2_EXTENDED_MORE - This option has the effect of PCRE2_EXTENDED, but, in addition, un- - escaped space and horizontal tab characters are ignored inside a char- - acter class. Note: only these two characters are ignored, not the full - set of pattern white space characters that are ignored outside a char- - acter class. PCRE2_EXTENDED_MORE is equivalent to Perl's /xx option, + This option has the effect of PCRE2_EXTENDED, but, in addition, un- + escaped space and horizontal tab characters are ignored inside a char- + acter class. Note: only these two characters are ignored, not the full + set of pattern white space characters that are ignored outside a char- + acter class. PCRE2_EXTENDED_MORE is equivalent to Perl's /xx option, and it can be changed within a pattern by a (?xx) option setting. PCRE2_FIRSTLINE If this option is set, the start of an unanchored pattern match must be - before or at the first newline in the subject string following the - start of matching, though the matched text may continue over the new- + before or at the first newline in the subject string following the + start of matching, though the matched text may continue over the new- line. If startoffset is non-zero, the limiting newline is not necessar- - ily the first newline in the subject. For example, if the subject + ily the first newline in the subject. For example, if the subject string is "abc\nxyz" (where \n represents a single-character newline) a - pattern match for "yz" succeeds with PCRE2_FIRSTLINE if startoffset is - greater than 3. See also PCRE2_USE_OFFSET_LIMIT, which provides a more - general limiting facility. If PCRE2_FIRSTLINE is set with an offset - limit, a match must occur in the first line and also within the offset + pattern match for "yz" succeeds with PCRE2_FIRSTLINE if startoffset is + greater than 3. See also PCRE2_USE_OFFSET_LIMIT, which provides a more + general limiting facility. If PCRE2_FIRSTLINE is set with an offset + limit, a match must occur in the first line and also within the offset limit. In other words, whichever limit comes first is used. This option has no effect for anchored patterns. PCRE2_LITERAL If this option is set, all meta-characters in the pattern are disabled, - and it is treated as a literal string. Matching literal strings with a + and it is treated as a literal string. Matching literal strings with a regular expression engine is not the most efficient way of doing it. If - you are doing a lot of literal matching and are worried about effi- + you are doing a lot of literal matching and are worried about effi- ciency, you should consider using other approaches. The only other main options that are allowed with PCRE2_LITERAL are: PCRE2_ANCHORED, PCRE2_ENDANCHORED, PCRE2_AUTO_CALLOUT, PCRE2_CASELESS, PCRE2_FIRSTLINE, PCRE2_MATCH_INVALID_UTF, PCRE2_NO_START_OPTIMIZE, PCRE2_NO_UTF_CHECK, - PCRE2_UTF, and PCRE2_USE_OFFSET_LIMIT. The extra options PCRE2_EX- + PCRE2_UTF, and PCRE2_USE_OFFSET_LIMIT. The extra options PCRE2_EX- TRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD are also supported. Any other options cause an error. PCRE2_MATCH_INVALID_UTF - This option forces PCRE2_UTF (see below) and also enables support for - matching by pcre2_match() in subject strings that contain invalid UTF - sequences. Note, however, that the 16-bit and 32-bit PCRE2 libraries - process strings as sequences of uint16_t or uint32_t code points. They + This option forces PCRE2_UTF (see below) and also enables support for + matching by pcre2_match() in subject strings that contain invalid UTF + sequences. Note, however, that the 16-bit and 32-bit PCRE2 libraries + process strings as sequences of uint16_t or uint32_t code points. They cannot find valid UTF sequences within an arbitrary string of bytes un- - less such sequences are suitably aligned. This facility is not sup- - ported for DFA matching. For details, see the pcre2unicode documenta- + less such sequences are suitably aligned. This facility is not sup- + ported for DFA matching. For details, see the pcre2unicode documenta- tion. PCRE2_MATCH_UNSET_BACKREF - If this option is set, a backreference to an unset capture group - matches an empty string (by default this causes the current matching + If this option is set, a backreference to an unset capture group + matches an empty string (by default this causes the current matching alternative to fail). A pattern such as (\1)(a) succeeds when this op- - tion is set (assuming it can find an "a" in the subject), whereas it - fails by default, for Perl compatibility. Setting this option makes + tion is set (assuming it can find an "a" in the subject), whereas it + fails by default, for Perl compatibility. Setting this option makes PCRE2 behave more like ECMAscript (aka JavaScript). PCRE2_MULTILINE - By default, for the purposes of matching "start of line" and "end of - line", PCRE2 treats the subject string as consisting of a single line - of characters, even if it actually contains newlines. The "start of - line" metacharacter (^) matches only at the start of the string, and - the "end of line" metacharacter ($) matches only at the end of the - string, or before a terminating newline (except when PCRE2_DOLLAR_EN- + By default, for the purposes of matching "start of line" and "end of + line", PCRE2 treats the subject string as consisting of a single line + of characters, even if it actually contains newlines. The "start of + line" metacharacter (^) matches only at the start of the string, and + the "end of line" metacharacter ($) matches only at the end of the + string, or before a terminating newline (except when PCRE2_DOLLAR_EN- DONLY is set). Note, however, that unless PCRE2_DOTALL is set, the "any - character" metacharacter (.) does not match at a newline. This behav- + character" metacharacter (.) does not match at a newline. This behav- iour (for ^, $, and dot) is the same as Perl. - When PCRE2_MULTILINE it is set, the "start of line" and "end of line" - constructs match immediately following or immediately before internal - newlines in the subject string, respectively, as well as at the very - start and end. This is equivalent to Perl's /m option, and it can be + When PCRE2_MULTILINE it is set, the "start of line" and "end of line" + constructs match immediately following or immediately before internal + newlines in the subject string, respectively, as well as at the very + start and end. This is equivalent to Perl's /m option, and it can be changed within a pattern by a (?m) option setting. Note that the "start of line" metacharacter does not match after a newline at the end of the - subject, for compatibility with Perl. However, you can change this by - setting the PCRE2_ALT_CIRCUMFLEX option. If there are no newlines in a - subject string, or no occurrences of ^ or $ in a pattern, setting + subject, for compatibility with Perl. However, you can change this by + setting the PCRE2_ALT_CIRCUMFLEX option. If there are no newlines in a + subject string, or no occurrences of ^ or $ in a pattern, setting PCRE2_MULTILINE has no effect. PCRE2_NEVER_BACKSLASH_C - This option locks out the use of \C in the pattern that is being com- - piled. This escape can cause unpredictable behaviour in UTF-8 or - UTF-16 modes, because it may leave the current matching point in the + This option locks out the use of \C in the pattern that is being com- + piled. This escape can cause unpredictable behaviour in UTF-8 or + UTF-16 modes, because it may leave the current matching point in the middle of a multi-code-unit character. This option may be useful in ap- plications that process patterns from external sources. Note that there is also a build-time option that permanently locks out the use of \C. PCRE2_NEVER_UCP - This option locks out the use of Unicode properties for handling \B, + This option locks out the use of Unicode properties for handling \B, \b, \D, \d, \S, \s, \W, \w, and some of the POSIX character classes, as - described for the PCRE2_UCP option below. In particular, it prevents - the creator of the pattern from enabling this facility by starting the - pattern with (*UCP). This option may be useful in applications that - process patterns from external sources. The option combination + described for the PCRE2_UCP option below. In particular, it prevents + the creator of the pattern from enabling this facility by starting the + pattern with (*UCP). This option may be useful in applications that + process patterns from external sources. The option combination PCRE2_UCP and PCRE2_NEVER_UCP causes an error. PCRE2_NEVER_UTF - This option locks out interpretation of the pattern as UTF-8, UTF-16, + This option locks out interpretation of the pattern as UTF-8, UTF-16, or UTF-32, depending on which library is in use. In particular, it pre- - vents the creator of the pattern from switching to UTF interpretation - by starting the pattern with (*UTF). This option may be useful in ap- + vents the creator of the pattern from switching to UTF interpretation + by starting the pattern with (*UTF). This option may be useful in ap- plications that process patterns from external sources. The combination of PCRE2_UTF and PCRE2_NEVER_UTF causes an error. PCRE2_NO_AUTO_CAPTURE If this option is set, it disables the use of numbered capturing paren- - theses in the pattern. Any opening parenthesis that is not followed by - ? behaves as if it were followed by ?: but named parentheses can still + theses in the pattern. Any opening parenthesis that is not followed by + ? behaves as if it were followed by ?: but named parentheses can still be used for capturing (and they acquire numbers in the usual way). This - is the same as Perl's /n option. Note that, when this option is set, - references to capture groups (backreferences or recursion/subroutine - calls) may only refer to named groups, though the reference can be by + is the same as Perl's /n option. Note that, when this option is set, + references to capture groups (backreferences or recursion/subroutine + calls) may only refer to named groups, though the reference can be by name or by number. PCRE2_NO_AUTO_POSSESS - If this (deprecated) option is set, it disables "auto-possessifica- - tion", which is an optimization that, for example, turns a+b into a++b + If this (deprecated) option is set, it disables "auto-possessifica- + tion", which is an optimization that, for example, turns a+b into a++b in order to avoid backtracks into a+ that can never be successful. How- - ever, if callouts are in use, auto-possessification means that some - callouts are never taken. You can set this option if you want the - matching functions to do a full unoptimized search and run all the + ever, if callouts are in use, auto-possessification means that some + callouts are never taken. You can set this option if you want the + matching functions to do a full unoptimized search and run all the callouts, but it is mainly provided for testing purposes. - If a compile context is available, it is recommended to use - pcre2_set_optimize() with the directive PCRE2_AUTO_POSSESS_OFF rather - than the compile option PCRE2_NO_AUTO_POSSESS. Note that - PCRE2_NO_AUTO_POSSESS takes precedence over the pcre2_set_optimize() + If a compile context is available, it is recommended to use + pcre2_set_optimize() with the directive PCRE2_AUTO_POSSESS_OFF rather + than the compile option PCRE2_NO_AUTO_POSSESS. Note that + PCRE2_NO_AUTO_POSSESS takes precedence over the pcre2_set_optimize() optimization directives PCRE2_AUTO_POSSESS and PCRE2_AUTO_POSSESS_OFF. PCRE2_NO_DOTSTAR_ANCHOR If this (deprecated) option is set, it disables an optimization that is - applied when .* is the first significant item in a top-level branch of - a pattern, and all the other branches also start with .* or with \A or + applied when .* is the first significant item in a top-level branch of + a pattern, and all the other branches also start with .* or with \A or \G or ^. The optimization is automatically disabled for .* if it is in- - side an atomic group or a capture group that is the subject of a back- + side an atomic group or a capture group that is the subject of a back- reference, or if the pattern contains (*PRUNE) or (*SKIP). When the op- timization is not disabled, such a pattern is automatically anchored if PCRE2_DOTALL is set for all the .* items and PCRE2_MULTILINE is not set - for any ^ items. Otherwise, the fact that any match must start either - at the start of the subject or following a newline is remembered. Like + for any ^ items. Otherwise, the fact that any match must start either + at the start of the subject or following a newline is remembered. Like other optimizations, this can cause callouts to be skipped. (If a com- - pile context is available, it is recommended to use pcre2_set_opti- + pile context is available, it is recommended to use pcre2_set_opti- mize() with the directive PCRE2_DOTSTAR_ANCHOR_OFF instead.) PCRE2_NO_START_OPTIMIZE - This is an option whose main effect is at matching time. It does not + This is an option whose main effect is at matching time. It does not change what pcre2_compile() generates, but it does affect the output of the JIT compiler. Setting this option is equivalent to calling - pcre2_set_optimize() with the directive parameter set to + pcre2_set_optimize() with the directive parameter set to PCRE2_START_OPTIMIZE_OFF. - There are a number of optimizations that may occur at the start of a - match, in order to speed up the process. For example, if it is known - that an unanchored match must start with a specific code unit value, - the matching code searches the subject for that value, and fails imme- - diately if it cannot find it, without actually running the main match- - ing function. The start-up optimizations are in effect a pre-scan of + There are a number of optimizations that may occur at the start of a + match, in order to speed up the process. For example, if it is known + that an unanchored match must start with a specific code unit value, + the matching code searches the subject for that value, and fails imme- + diately if it cannot find it, without actually running the main match- + ing function. The start-up optimizations are in effect a pre-scan of the subject that takes place before the pattern is run. - Disabling the start-up optimizations may cause performance to suffer. - However, this may be desirable for patterns which contain callouts or - items such as (*COMMIT) and (*MARK). See the above description of + Disabling the start-up optimizations may cause performance to suffer. + However, this may be desirable for patterns which contain callouts or + items such as (*COMMIT) and (*MARK). See the above description of PCRE2_START_OPTIMIZE_OFF for further details. PCRE2_NO_UTF_CHECK - When PCRE2_UTF is set, the validity of the pattern as a UTF string is - automatically checked. There are discussions about the validity of - UTF-8 strings, UTF-16 strings, and UTF-32 strings in the pcre2unicode - document. If an invalid UTF sequence is found, pcre2_compile() returns + When PCRE2_UTF is set, the validity of the pattern as a UTF string is + automatically checked. There are discussions about the validity of + UTF-8 strings, UTF-16 strings, and UTF-32 strings in the pcre2unicode + document. If an invalid UTF sequence is found, pcre2_compile() returns a negative error code. - If you know that your pattern is a valid UTF string, and you want to - skip this check for performance reasons, you can set the + If you know that your pattern is a valid UTF string, and you want to + skip this check for performance reasons, you can set the PCRE2_NO_UTF_CHECK option. When it is set, the effect of passing an in- - valid UTF string as a pattern is undefined. It may cause your program + valid UTF string as a pattern is undefined. It may cause your program to crash or loop. Note that this option can also be passed to pcre2_match() and - pcre2_dfa_match(), to suppress UTF validity checking of the subject + pcre2_dfa_match(), to suppress UTF validity checking of the subject string. Note also that setting PCRE2_NO_UTF_CHECK at compile time does not dis- - able the error that is given if an escape sequence for an invalid Uni- - code code point is encountered in the pattern. In particular, the so- - called "surrogate" code points (0xd800 to 0xdfff) are invalid. If you - want to allow escape sequences such as \x{d800} you can set the - PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra option, as described in the - section entitled "Extra compile options" below. However, this is pos- + able the error that is given if an escape sequence for an invalid Uni- + code code point is encountered in the pattern. In particular, the so- + called "surrogate" code points (0xd800 to 0xdfff) are invalid. If you + want to allow escape sequences such as \x{d800} you can set the + PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra option, as described in the + section entitled "Extra compile options" below. However, this is pos- sible only in UTF-8 and UTF-32 modes, because these values are not rep- resentable in UTF-16. PCRE2_UCP This option has two effects. Firstly, it change the way PCRE2 processes - \B, \b, \D, \d, \S, \s, \W, \w, and some of the POSIX character - classes. By default, only ASCII characters are recognized, but if - PCRE2_UCP is set, Unicode properties are used to classify characters. - There are some PCRE2_EXTRA options (see below) that add finer control - to this behaviour. More details are given in the section on generic + \B, \b, \D, \d, \S, \s, \W, \w, and some of the POSIX character + classes. By default, only ASCII characters are recognized, but if + PCRE2_UCP is set, Unicode properties are used to classify characters. + There are some PCRE2_EXTRA options (see below) that add finer control + to this behaviour. More details are given in the section on generic character types in the pcre2pattern page. - The second effect of PCRE2_UCP is to force the use of Unicode proper- + The second effect of PCRE2_UCP is to force the use of Unicode proper- ties for upper/lower casing operations, even when PCRE2_UTF is not set. - This makes it possible to process strings in the 16-bit UCS-2 code. - This option is available only if PCRE2 has been compiled with Unicode + This makes it possible to process strings in the 16-bit UCS-2 code. + This option is available only if PCRE2 has been compiled with Unicode support (which is the default). The PCRE2_EXTRA_CASELESS_RESTRICT option (see above) restricts caseless - matching such that ASCII characters match only ASCII characters and - non-ASCII characters match only non-ASCII characters. The PCRE2_EX- - TRA_TURKISH_CASING option (see above) alters the matching of the 'i' - characters to follow their behaviour in Turkish and Azeri languages. - For further details on PCRE2_EXTRA_CASELESS_RESTRICT and PCRE2_EX- + matching such that ASCII characters match only ASCII characters and + non-ASCII characters match only non-ASCII characters. The PCRE2_EX- + TRA_TURKISH_CASING option (see above) alters the matching of the 'i' + characters to follow their behaviour in Turkish and Azeri languages. + For further details on PCRE2_EXTRA_CASELESS_RESTRICT and PCRE2_EX- TRA_TURKISH_CASING, see the pcre2unicode page. PCRE2_UNGREEDY - This option inverts the "greediness" of the quantifiers so that they - are not greedy by default, but become greedy if followed by "?". It is - not compatible with Perl. It can also be set by a (?U) option setting + This option inverts the "greediness" of the quantifiers so that they + are not greedy by default, but become greedy if followed by "?". It is + not compatible with Perl. It can also be set by a (?U) option setting within the pattern. PCRE2_USE_OFFSET_LIMIT This option must be set for pcre2_compile() if pcre2_set_offset_limit() - is going to be used to set a non-default offset limit in a match con- - text for matches that use this pattern. An error is generated if an - offset limit is set without this option. For more details, see the de- - scription of pcre2_set_offset_limit() in the section that describes + is going to be used to set a non-default offset limit in a match con- + text for matches that use this pattern. An error is generated if an + offset limit is set without this option. For more details, see the de- + scription of pcre2_set_offset_limit() in the section that describes match contexts. See also the PCRE2_FIRSTLINE option above. PCRE2_UTF - This option causes PCRE2 to regard both the pattern and the subject - strings that are subsequently processed as strings of UTF characters - instead of single-code-unit strings. It is available when PCRE2 is - built to include Unicode support (which is the default). If Unicode + This option causes PCRE2 to regard both the pattern and the subject + strings that are subsequently processed as strings of UTF characters + instead of single-code-unit strings. It is available when PCRE2 is + built to include Unicode support (which is the default). If Unicode support is not available, the use of this option provokes an error. De- - tails of how PCRE2_UTF changes the behaviour of PCRE2 are given in the + tails of how PCRE2_UTF changes the behaviour of PCRE2 are given in the pcre2unicode page. In particular, note that it changes the way PCRE2_CASELESS works. Extra compile options - The option bits that can be set in a compile context by calling the + The option bits that can be set in a compile context by calling the pcre2_set_compile_extra_options() function are as follows: PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK @@ -2070,158 +2080,158 @@ COMPILING A PATTERN PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES - This option applies when compiling a pattern in UTF-8 or UTF-32 mode. - It is forbidden in UTF-16 mode, and ignored in non-UTF modes. Unicode + This option applies when compiling a pattern in UTF-8 or UTF-32 mode. + It is forbidden in UTF-16 mode, and ignored in non-UTF modes. Unicode "surrogate" code points in the range 0xd800 to 0xdfff are used in pairs - in UTF-16 to encode code points with values in the range 0x10000 to - 0x10ffff. The surrogates cannot therefore be represented in UTF-16. + in UTF-16 to encode code points with values in the range 0x10000 to + 0x10ffff. The surrogates cannot therefore be represented in UTF-16. They can be represented in UTF-8 and UTF-32, but are defined as invalid - code points, and cause errors if encountered in a UTF-8 or UTF-32 + code points, and cause errors if encountered in a UTF-8 or UTF-32 string that is being checked for validity by PCRE2. - These values also cause errors if encountered in escape sequences such + These values also cause errors if encountered in escape sequences such as \x{d912} within a pattern. However, it seems that some applications, when using PCRE2 to check for unwanted characters in UTF-8 strings, ex- - plicitly test for the surrogates using escape sequences. The - PCRE2_NO_UTF_CHECK option does not disable the error that occurs, be- + plicitly test for the surrogates using escape sequences. The + PCRE2_NO_UTF_CHECK option does not disable the error that occurs, be- cause it applies only to the testing of input strings for UTF validity. - If the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surro- - gate code point values in UTF-8 and UTF-32 patterns no longer provoke - errors and are incorporated in the compiled pattern. However, they can - only match subject characters if the matching function is called with + If the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surro- + gate code point values in UTF-8 and UTF-32 patterns no longer provoke + errors and are incorporated in the compiled pattern. However, they can + only match subject characters if the matching function is called with PCRE2_NO_UTF_CHECK set. PCRE2_EXTRA_ALT_BSUX - The original option PCRE2_ALT_BSUX causes PCRE2 to process \U, \u, and - \x in the way that ECMAscript (aka JavaScript) does. Additional func- + The original option PCRE2_ALT_BSUX causes PCRE2 to process \U, \u, and + \x in the way that ECMAscript (aka JavaScript) does. Additional func- tionality was defined by ECMAscript 6; setting PCRE2_EXTRA_ALT_BSUX has - the effect of PCRE2_ALT_BSUX, but in addition it recognizes \u{hhh..} + the effect of PCRE2_ALT_BSUX, but in addition it recognizes \u{hhh..} as a hexadecimal character code, where hhh.. is any number of hexadeci- mal digits. PCRE2_EXTRA_ASCII_BSD - This option forces \d to match only ASCII digits, even when PCRE2_UCP - is set. It can be changed within a pattern by means of the (?aD) op- + This option forces \d to match only ASCII digits, even when PCRE2_UCP + is set. It can be changed within a pattern by means of the (?aD) op- tion setting. PCRE2_EXTRA_ASCII_BSS - This option forces \s to match only ASCII space characters, even when - PCRE2_UCP is set. It can be changed within a pattern by means of the + This option forces \s to match only ASCII space characters, even when + PCRE2_UCP is set. It can be changed within a pattern by means of the (?aS) option setting. PCRE2_EXTRA_ASCII_BSW - This option forces \w to match only ASCII word characters, even when - PCRE2_UCP is set. It can be changed within a pattern by means of the + This option forces \w to match only ASCII word characters, even when + PCRE2_UCP is set. It can be changed within a pattern by means of the (?aW) option setting. PCRE2_EXTRA_ASCII_DIGIT This option forces the POSIX character classes [:digit:] and [:xdigit:] - to match only ASCII digits, even when PCRE2_UCP is set. It can be + to match only ASCII digits, even when PCRE2_UCP is set. It can be changed within a pattern by means of the (?aT) option setting. PCRE2_EXTRA_ASCII_POSIX This option forces all the POSIX character classes, including [:digit:] - and [:xdigit:], to match only ASCII characters, even when PCRE2_UCP is - set. It can be changed within a pattern by means of the (?aP) option - setting, but note that this also sets PCRE2_EXTRA_ASCII_DIGIT in order + and [:xdigit:], to match only ASCII characters, even when PCRE2_UCP is + set. It can be changed within a pattern by means of the (?aP) option + setting, but note that this also sets PCRE2_EXTRA_ASCII_DIGIT in order to ensure that (?-aP) unsets all ASCII restrictions for POSIX classes. PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL - This is a dangerous option. Use with care. By default, an unrecognized - escape such as \j or a malformed one such as \x{2z} causes a compile- + This is a dangerous option. Use with care. By default, an unrecognized + escape such as \j or a malformed one such as \x{2z} causes a compile- time error when detected by pcre2_compile(). Perl is somewhat inconsis- - tent in handling such items: for example, \j is treated as a literal - "j", and non-hexadecimal digits in \x{} are just ignored, though warn- - ings are given in both cases if Perl's warning switch is enabled. How- - ever, a malformed octal number after \o{ always causes an error in + tent in handling such items: for example, \j is treated as a literal + "j", and non-hexadecimal digits in \x{} are just ignored, though warn- + ings are given in both cases if Perl's warning switch is enabled. How- + ever, a malformed octal number after \o{ always causes an error in Perl. - If the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL extra option is passed to - pcre2_compile(), all unrecognized or malformed escape sequences are - treated as single-character escapes. For example, \j is a literal "j" - and \x{2z} is treated as the literal string "x{2z}". Setting this op- + If the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL extra option is passed to + pcre2_compile(), all unrecognized or malformed escape sequences are + treated as single-character escapes. For example, \j is a literal "j" + and \x{2z} is treated as the literal string "x{2z}". Setting this op- tion means that typos in patterns may go undetected and have unexpected - results. Also note that a sequence such as [\N{] is interpreted as a - malformed attempt at [\N{...}] and so is treated as [N{] whereas [\N] + results. Also note that a sequence such as [\N{] is interpreted as a + malformed attempt at [\N{...}] and so is treated as [N{] whereas [\N] gives an error because an unqualified \N is a valid escape sequence but - is not supported in a character class. To reiterate: this is a danger- + is not supported in a character class. To reiterate: this is a danger- ous option. Use with great care. PCRE2_EXTRA_CASELESS_RESTRICT - When either PCRE2_UCP or PCRE2_UTF is set, caseless matching follows + When either PCRE2_UCP or PCRE2_UTF is set, caseless matching follows Unicode rules, which allow for more than two cases per character. There are two case-equivalent character sets that contain both ASCII and non- ASCII characters. The ASCII letter S is case-equivalent to U+017f (long - S) and the ASCII letter K is case-equivalent to U+212a (Kelvin sign). - This option disables recognition of case-equivalences that cross the + S) and the ASCII letter K is case-equivalent to U+212a (Kelvin sign). + This option disables recognition of case-equivalences that cross the ASCII/non-ASCII boundary. In a caseless match, both characters must ei- - ther be ASCII or non-ASCII. The option can be changed within a pattern + ther be ASCII or non-ASCII. The option can be changed within a pattern by the (*CASELESS_RESTRICT) or (?r) option settings. PCRE2_EXTRA_ESCAPED_CR_IS_LF - There are some legacy applications where the escape sequence \r in a - pattern is expected to match a newline. If this option is set, \r in a - pattern is converted to \n so that it matches a LF (linefeed) instead - of a CR (carriage return) character. The option does not affect a lit- - eral CR in the pattern, nor does it affect CR specified as an explicit + There are some legacy applications where the escape sequence \r in a + pattern is expected to match a newline. If this option is set, \r in a + pattern is converted to \n so that it matches a LF (linefeed) instead + of a CR (carriage return) character. The option does not affect a lit- + eral CR in the pattern, nor does it affect CR specified as an explicit code point such as \x{0D}. PCRE2_EXTRA_MATCH_LINE - This option is provided for use by the -x option of pcre2grep. It - causes the pattern only to match complete lines. This is achieved by - automatically inserting the code for "^(?:" at the start of the com- - piled pattern and ")$" at the end. Thus, when PCRE2_MULTILINE is set, - the matched line may be in the middle of the subject string. This op- + This option is provided for use by the -x option of pcre2grep. It + causes the pattern only to match complete lines. This is achieved by + automatically inserting the code for "^(?:" at the start of the com- + piled pattern and ")$" at the end. Thus, when PCRE2_MULTILINE is set, + the matched line may be in the middle of the subject string. This op- tion can be used with PCRE2_LITERAL. PCRE2_EXTRA_MATCH_WORD - This option is provided for use by the -w option of pcre2grep. It - causes the pattern only to match strings that have a word boundary at - the start and the end. This is achieved by automatically inserting the - code for "\b(?:" at the start of the compiled pattern and ")\b" at the - end. The option may be used with PCRE2_LITERAL. However, it is ignored + This option is provided for use by the -w option of pcre2grep. It + causes the pattern only to match strings that have a word boundary at + the start and the end. This is achieved by automatically inserting the + code for "\b(?:" at the start of the compiled pattern and ")\b" at the + end. The option may be used with PCRE2_LITERAL. However, it is ignored if PCRE2_EXTRA_MATCH_LINE is also set. PCRE2_EXTRA_NO_BS0 If this option is set (note that its final character is the digit 0) it - locks out the use of the sequence \0 unless at least one more octal + locks out the use of the sequence \0 unless at least one more octal digit follows. PCRE2_EXTRA_PYTHON_OCTAL - If this option is set, PCRE2 follows Python's rules for interpreting - octal escape sequences. The rules for handling sequences such as \14, - which could be an octal number or a back reference are different. De- + If this option is set, PCRE2 follows Python's rules for interpreting + octal escape sequences. The rules for handling sequences such as \14, + which could be an octal number or a back reference are different. De- tails are given in the pcre2pattern documentation. PCRE2_EXTRA_NEVER_CALLOUT If this option is set, PCRE2 treats callouts in the pattern as a syntax error, returning PCRE2_ERROR_CALLOUT_CALLER_DISABLED. This is useful if - the application knows that a callout will not be provided to - pcre2_match(), so that callouts in the pattern are not silently ig- + the application knows that a callout will not be provided to + pcre2_match(), so that callouts in the pattern are not silently ig- nored. PCRE2_EXTRA_TURKISH_CASING - This option alters case-equivalence of the 'i' letters to follow the + This option alters case-equivalence of the 'i' letters to follow the alphabet used by Turkish and Azeri languages. The option can be changed within a pattern by the (*TURKISH_CASING) start-of-pattern setting. Ei- ther the UTF or UCP options must be set. In the 8-bit library, UTF must - be set. This option cannot be combined with PCRE2_EXTRA_CASELESS_RE- + be set. This option cannot be combined with PCRE2_EXTRA_CASELESS_RE- STRICT. @@ -2244,16 +2254,16 @@ JUST-IN-TIME (JIT) COMPILATION void pcre2_jit_stack_free(pcre2_jit_stack *jit_stack); - These functions provide support for JIT compilation, which, if the - just-in-time compiler is available, further processes a compiled pat- + These functions provide support for JIT compilation, which, if the + just-in-time compiler is available, further processes a compiled pat- tern into machine code that executes much faster than the pcre2_match() - interpretive matching function. Full details are given in the pcre2jit + interpretive matching function. Full details are given in the pcre2jit documentation. - JIT compilation is a heavyweight optimization. It can take some time - for patterns to be analyzed, and for one-off matches and simple pat- - terns the benefit of faster execution might be offset by a much slower - compilation time. Most (but not all) patterns can be optimized by the + JIT compilation is a heavyweight optimization. It can take some time + for patterns to be analyzed, and for one-off matches and simple pat- + terns the benefit of faster execution might be offset by a much slower + compilation time. Most (but not all) patterns can be optimized by the JIT compiler. @@ -2264,48 +2274,48 @@ LOCALE SUPPORT void pcre2_maketables_free(pcre2_general_context *gcontext, const uint8_t *tables); - PCRE2 handles caseless matching, and determines whether characters are - letters, digits, or whatever, by reference to a set of tables, indexed + PCRE2 handles caseless matching, and determines whether characters are + letters, digits, or whatever, by reference to a set of tables, indexed by character code point. However, this applies only to characters whose - code points are less than 256. By default, higher-valued code points + code points are less than 256. By default, higher-valued code points never match escapes such as \w or \d. When PCRE2 is built with Unicode support (the default), certain Unicode - character properties can be tested with \p and \P, or, alternatively, + character properties can be tested with \p and \P, or, alternatively, the PCRE2_UCP option can be set when a pattern is compiled; this causes - \w and friends to use Unicode property support instead of the built-in + \w and friends to use Unicode property support instead of the built-in tables. PCRE2_UCP also causes upper/lower casing operations on charac- ters with code points greater than 127 to use Unicode properties. These - effects apply even when PCRE2_UTF is not set. There are, however, some - PCRE2_EXTRA options (see above) that can be used to modify or suppress + effects apply even when PCRE2_UTF is not set. There are, however, some + PCRE2_EXTRA options (see above) that can be used to modify or suppress them. - The use of locales with Unicode is discouraged. If you are handling - characters with code points greater than 127, you should either use + The use of locales with Unicode is discouraged. If you are handling + characters with code points greater than 127, you should either use Unicode support, or use locales, but not try to mix the two. - PCRE2 contains a built-in set of character tables that are used by de- - fault. These are sufficient for many applications. Normally, the in- - ternal tables recognize only ASCII characters. However, when PCRE2 is + PCRE2 contains a built-in set of character tables that are used by de- + fault. These are sufficient for many applications. Normally, the in- + ternal tables recognize only ASCII characters. However, when PCRE2 is built, it is possible to cause the internal tables to be rebuilt in the default "C" locale of the local system, which may cause them to be dif- ferent. - The built-in tables can be overridden by tables supplied by the appli- - cation that calls PCRE2. These may be created in a different locale - from the default. As more and more applications change to using Uni- + The built-in tables can be overridden by tables supplied by the appli- + cation that calls PCRE2. These may be created in a different locale + from the default. As more and more applications change to using Uni- code, the need for this locale support is expected to die away. - External tables are built by calling the pcre2_maketables() function, + External tables are built by calling the pcre2_maketables() function, in the relevant locale. The only argument to this function is a general - context, which can be used to pass a custom memory allocator. If the + context, which can be used to pass a custom memory allocator. If the argument is NULL, the system malloc() is used. The result can be passed to pcre2_compile() as often as necessary, by creating a compile context - and calling pcre2_set_character_tables() to set the tables pointer + and calling pcre2_set_character_tables() to set the tables pointer therein. - For example, to build and use tables that are appropriate for the - French locale (where accented characters with values greater than 127 + For example, to build and use tables that are appropriate for the + French locale (where accented characters with values greater than 127 are treated as letters), the following code could be used: setlocale(LC_CTYPE, "fr_FR"); @@ -2314,31 +2324,31 @@ LOCALE SUPPORT pcre2_set_character_tables(ccontext, tables); re = pcre2_compile(..., ccontext); - The locale name "fr_FR" is used on Linux and other Unix-like systems; + The locale name "fr_FR" is used on Linux and other Unix-like systems; if you are using Windows, the name for the French locale is "french". The pointer that is passed (via the compile context) to pcre2_compile() is saved with the compiled pattern, and the same tables are used by the - matching functions. Thus, for any single pattern, compilation and - matching both happen in the same locale, but different patterns can be + matching functions. Thus, for any single pattern, compilation and + matching both happen in the same locale, but different patterns can be processed in different locales. - It is the caller's responsibility to ensure that the memory containing + It is the caller's responsibility to ensure that the memory containing the tables remains available while they are still in use. When they are - no longer needed, you can discard them using pcre2_maketables_free(), - which should pass as its first parameter the same global context that + no longer needed, you can discard them using pcre2_maketables_free(), + which should pass as its first parameter the same global context that was used to create the tables. Saving locale tables - The tables described above are just a sequence of binary bytes, which - makes them independent of hardware characteristics such as endianness - or whether the processor is 32-bit or 64-bit. A copy of the result of - pcre2_maketables() can therefore be saved in a file or elsewhere and - re-used later, even in a different program or on another computer. The - size of the tables (number of bytes) must be obtained by calling - pcre2_config() with the PCRE2_CONFIG_TABLES_LENGTH option because - pcre2_maketables() does not return this value. Note that the + The tables described above are just a sequence of binary bytes, which + makes them independent of hardware characteristics such as endianness + or whether the processor is 32-bit or 64-bit. A copy of the result of + pcre2_maketables() can therefore be saved in a file or elsewhere and + re-used later, even in a different program or on another computer. The + size of the tables (number of bytes) must be obtained by calling + pcre2_config() with the PCRE2_CONFIG_TABLES_LENGTH option because + pcre2_maketables() does not return this value. Note that the pcre2_dftables program, which is part of the PCRE2 build system, can be used stand-alone to create a file that contains a set of binary tables. See the pcre2build documentation for details. @@ -2348,13 +2358,13 @@ INFORMATION ABOUT A COMPILED PATTERN int pcre2_pattern_info(const pcre2 *code, uint32_t what, void *where); - The pcre2_pattern_info() function returns general information about a + The pcre2_pattern_info() function returns general information about a compiled pattern. For information about callouts, see the next section. - The first argument for pcre2_pattern_info() is a pointer to the com- + The first argument for pcre2_pattern_info() is a pointer to the com- piled pattern. The second argument specifies which piece of information - is required, and the third argument is a pointer to a variable to re- - ceive the data. If the third argument is NULL, the first argument is - ignored, and the function returns the size in bytes of the variable + is required, and the third argument is a pointer to a variable to re- + ceive the data. If the third argument is NULL, the first argument is + ignored, and the function returns the size in bytes of the variable that is required for the information requested. Otherwise, the yield of the function is zero for success, or one of the following negative num- bers: @@ -2365,8 +2375,8 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_ERROR_UNSET the requested field is not set The "magic number" is placed at the start of each compiled pattern as a - simple check against passing an arbitrary memory pointer. Here is a - typical call of pcre2_pattern_info(), to obtain the length of the com- + simple check against passing an arbitrary memory pointer. Here is a + typical call of pcre2_pattern_info(), to obtain the length of the com- piled pattern: int rc; @@ -2384,22 +2394,22 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_INFO_EXTRAOPTIONS Return copies of the pattern's options. The third argument should point - to a uint32_t variable. PCRE2_INFO_ARGOPTIONS returns exactly the op- - tions that were passed to pcre2_compile(), whereas PCRE2_INFO_ALLOP- - TIONS returns the compile options as modified by any top-level (*XXX) - option settings such as (*UTF) at the start of the pattern itself. - PCRE2_INFO_EXTRAOPTIONS returns the extra options that were set in the - compile context by calling the pcre2_set_compile_extra_options() func- + to a uint32_t variable. PCRE2_INFO_ARGOPTIONS returns exactly the op- + tions that were passed to pcre2_compile(), whereas PCRE2_INFO_ALLOP- + TIONS returns the compile options as modified by any top-level (*XXX) + option settings such as (*UTF) at the start of the pattern itself. + PCRE2_INFO_EXTRAOPTIONS returns the extra options that were set in the + compile context by calling the pcre2_set_compile_extra_options() func- tion. - For example, if the pattern /(*UTF)abc/ is compiled with the PCRE2_EX- - TENDED option, the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED - and PCRE2_UTF. Option settings such as (?i) that can change within a + For example, if the pattern /(*UTF)abc/ is compiled with the PCRE2_EX- + TENDED option, the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED + and PCRE2_UTF. Option settings such as (?i) that can change within a pattern do not affect the result of PCRE2_INFO_ALLOPTIONS, even if they - appear right at the start of the pattern. (This was different in some + appear right at the start of the pattern. (This was different in some earlier releases.) - A pattern compiled without PCRE2_ANCHORED is automatically anchored by + A pattern compiled without PCRE2_ANCHORED is automatically anchored by PCRE2 if the first significant item in every top-level branch is one of the following: @@ -2408,7 +2418,7 @@ INFORMATION ABOUT A COMPILED PATTERN \G always .* sometimes - see below - When .* is the first significant item, anchoring is possible only when + When .* is the first significant item, anchoring is possible only when all the following are true: .* is not in an atomic group @@ -2419,94 +2429,94 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_NO_DOTSTAR_ANCHOR is not set Dotstar anchoring has not been disabled with PCRE2_DOTSTAR_ANCHOR_OFF - For patterns that are auto-anchored, the PCRE2_ANCHORED bit is set in + For patterns that are auto-anchored, the PCRE2_ANCHORED bit is set in the options returned for PCRE2_INFO_ALLOPTIONS. PCRE2_INFO_BACKREFMAX - Return the number of the highest backreference in the pattern. The - third argument should point to a uint32_t variable. Named capture - groups acquire numbers as well as names, and these count towards the - highest backreference. Backreferences such as \4 or \g{12} match the + Return the number of the highest backreference in the pattern. The + third argument should point to a uint32_t variable. Named capture + groups acquire numbers as well as names, and these count towards the + highest backreference. Backreferences such as \4 or \g{12} match the captured characters of the given group, but in addition, the check that a capture group is set in a conditional group such as (?(3)a|b) is also a backreference. Zero is returned if there are no backreferences. PCRE2_INFO_BSR - The output is a uint32_t integer whose value indicates what character - sequences the \R escape sequence matches. A value of PCRE2_BSR_UNICODE - means that \R matches any Unicode line ending sequence; a value of + The output is a uint32_t integer whose value indicates what character + sequences the \R escape sequence matches. A value of PCRE2_BSR_UNICODE + means that \R matches any Unicode line ending sequence; a value of PCRE2_BSR_ANYCRLF means that \R matches only CR, LF, or CRLF. PCRE2_INFO_CAPTURECOUNT - Return the highest capture group number in the pattern. In patterns + Return the highest capture group number in the pattern. In patterns where (?| is not used, this is also the total number of capture groups. The third argument should point to a uint32_t variable. PCRE2_INFO_DEPTHLIMIT - If the pattern set a backtracking depth limit by including an item of - the form (*LIMIT_DEPTH=nnnn) at the start, the value is returned. The + If the pattern set a backtracking depth limit by including an item of + the form (*LIMIT_DEPTH=nnnn) at the start, the value is returned. The third argument should point to a uint32_t integer. If no such value has - been set, the call to pcre2_pattern_info() returns the error PCRE2_ER- + been set, the call to pcre2_pattern_info() returns the error PCRE2_ER- ROR_UNSET. Note that this limit will only be used during matching if it - is less than the limit set or defaulted by the caller of the match + is less than the limit set or defaulted by the caller of the match function. PCRE2_INFO_FIRSTBITMAP - In the absence of a single first code unit for a non-anchored pattern, - pcre2_compile() may construct a 256-bit table that defines a fixed set - of values for the first code unit in any match. For example, a pattern - that starts with [abc] results in a table with three bits set. When - code unit values greater than 255 are supported, the flag bit for 255 - means "any code unit of value 255 or above". If such a table was con- - structed, a pointer to it is returned. Otherwise NULL is returned. The + In the absence of a single first code unit for a non-anchored pattern, + pcre2_compile() may construct a 256-bit table that defines a fixed set + of values for the first code unit in any match. For example, a pattern + that starts with [abc] results in a table with three bits set. When + code unit values greater than 255 are supported, the flag bit for 255 + means "any code unit of value 255 or above". If such a table was con- + structed, a pointer to it is returned. Otherwise NULL is returned. The third argument should point to a const uint8_t * variable. PCRE2_INFO_FIRSTCODETYPE Return information about the first code unit of any matched string, for - a non-anchored pattern. The third argument should point to a uint32_t - variable. If there is a fixed first value, for example, the letter "c" - from a pattern such as (cat|cow|coyote), 1 is returned, and the value - can be retrieved using PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed - first value, but it is known that a match can occur only at the start - of the subject or following a newline in the subject, 2 is returned. + a non-anchored pattern. The third argument should point to a uint32_t + variable. If there is a fixed first value, for example, the letter "c" + from a pattern such as (cat|cow|coyote), 1 is returned, and the value + can be retrieved using PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed + first value, but it is known that a match can occur only at the start + of the subject or following a newline in the subject, 2 is returned. Otherwise, and for anchored patterns, 0 is returned. PCRE2_INFO_FIRSTCODEUNIT - Return the value of the first code unit of any matched string for a - pattern where PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0. - The third argument should point to a uint32_t variable. In the 8-bit - library, the value is always less than 256. In the 16-bit library the - value can be up to 0xffff. In the 32-bit library in UTF-32 mode the + Return the value of the first code unit of any matched string for a + pattern where PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0. + The third argument should point to a uint32_t variable. In the 8-bit + library, the value is always less than 256. In the 16-bit library the + value can be up to 0xffff. In the 32-bit library in UTF-32 mode the value can be up to 0x10ffff, and up to 0xffffffff when not using UTF-32 mode. PCRE2_INFO_FRAMESIZE Return the size (in bytes) of the data frames that are used to remember - backtracking positions when the pattern is processed by pcre2_match() - without the use of JIT. The third argument should point to a size_t + backtracking positions when the pattern is processed by pcre2_match() + without the use of JIT. The third argument should point to a size_t variable. The frame size depends on the number of capturing parentheses in the pattern. Each additional capture group adds two PCRE2_SIZE vari- ables. PCRE2_INFO_HASBACKSLASHC - Return 1 if the pattern contains any instances of \C, otherwise 0. The + Return 1 if the pattern contains any instances of \C, otherwise 0. The third argument should point to a uint32_t variable. PCRE2_INFO_HASCRORLF - Return 1 if the pattern contains any explicit matches for CR or LF - characters, otherwise 0. The third argument should point to a uint32_t - variable. An explicit match is either a literal CR or LF character, or - \r or \n or one of the equivalent hexadecimal or octal escape se- + Return 1 if the pattern contains any explicit matches for CR or LF + characters, otherwise 0. The third argument should point to a uint32_t + variable. An explicit match is either a literal CR or LF character, or + \r or \n or one of the equivalent hexadecimal or octal escape se- quences. PCRE2_INFO_HEAPLIMIT @@ -2514,45 +2524,45 @@ INFORMATION ABOUT A COMPILED PATTERN If the pattern set a heap memory limit by including an item of the form (*LIMIT_HEAP=nnnn) at the start, the value is returned. The third argu- ment should point to a uint32_t integer. If no such value has been set, - the call to pcre2_pattern_info() returns the error PCRE2_ERROR_UNSET. - Note that this limit will only be used during matching if it is less + the call to pcre2_pattern_info() returns the error PCRE2_ERROR_UNSET. + Note that this limit will only be used during matching if it is less than the limit set or defaulted by the caller of the match function. PCRE2_INFO_JCHANGED - Return 1 if the (?J) or (?-J) option setting is used in the pattern, - otherwise 0. The third argument should point to a uint32_t variable. - (?J) and (?-J) set and unset the local PCRE2_DUPNAMES option, respec- + Return 1 if the (?J) or (?-J) option setting is used in the pattern, + otherwise 0. The third argument should point to a uint32_t variable. + (?J) and (?-J) set and unset the local PCRE2_DUPNAMES option, respec- tively. PCRE2_INFO_JITSIZE - If the compiled pattern was successfully processed by pcre2_jit_com- - pile(), return the size of the JIT compiled code, otherwise return + If the compiled pattern was successfully processed by pcre2_jit_com- + pile(), return the size of the JIT compiled code, otherwise return zero. The third argument should point to a size_t variable. PCRE2_INFO_LASTCODETYPE - Returns 1 if there is a rightmost literal code unit that must exist in - any matched string, other than at its start. The third argument should + Returns 1 if there is a rightmost literal code unit that must exist in + any matched string, other than at its start. The third argument should point to a uint32_t variable. If there is no such value, 0 is returned. - When 1 is returned, the code unit value itself can be retrieved using + When 1 is returned, the code unit value itself can be retrieved using PCRE2_INFO_LASTCODEUNIT. For anchored patterns, a last literal value is - recorded only if it follows something of variable length. For example, - for the pattern /^a\d+z\d+/ the returned value is 1 (with "z" returned - from PCRE2_INFO_LASTCODEUNIT), but for /^a\dz\d/ the returned value is + recorded only if it follows something of variable length. For example, + for the pattern /^a\d+z\d+/ the returned value is 1 (with "z" returned + from PCRE2_INFO_LASTCODEUNIT), but for /^a\dz\d/ the returned value is 0. PCRE2_INFO_LASTCODEUNIT - Return the value of the rightmost literal code unit that must exist in - any matched string, other than at its start, for a pattern where + Return the value of the rightmost literal code unit that must exist in + any matched string, other than at its start, for a pattern where PCRE2_INFO_LASTCODETYPE returns 1. Otherwise, return 0. The third argu- ment should point to a uint32_t variable. PCRE2_INFO_MATCHEMPTY - Return 1 if the pattern might match an empty string, otherwise 0. The + Return 1 if the pattern might match an empty string, otherwise 0. The third argument should point to a uint32_t variable. When a pattern con- tains recursive subroutine calls it is not always possible to determine whether or not it can match an empty string. PCRE2 takes a cautious ap- @@ -2560,44 +2570,44 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_INFO_MATCHLIMIT - If the pattern set a match limit by including an item of the form - (*LIMIT_MATCH=nnnn) at the start, the value is returned. The third ar- - gument should point to a uint32_t integer. If no such value has been + If the pattern set a match limit by including an item of the form + (*LIMIT_MATCH=nnnn) at the start, the value is returned. The third ar- + gument should point to a uint32_t integer. If no such value has been set, the call to pcre2_pattern_info() returns the error PCRE2_ERROR_UN- - SET. Note that this limit will only be used during matching if it is - less than the limit set or defaulted by the caller of the match func- + SET. Note that this limit will only be used during matching if it is + less than the limit set or defaulted by the caller of the match func- tion. PCRE2_INFO_MAXLOOKBEHIND - A lookbehind assertion moves back a certain number of characters (not - code units) when it starts to process each of its branches. This re- - quest returns the largest of these backward moves. The third argument + A lookbehind assertion moves back a certain number of characters (not + code units) when it starts to process each of its branches. This re- + quest returns the largest of these backward moves. The third argument should point to a uint32_t integer. The simple assertions \b and \B re- - quire a one-character lookbehind and cause PCRE2_INFO_MAXLOOKBEHIND to - return 1 in the absence of anything longer. \A also registers a one- - character lookbehind, though it does not actually inspect the previous + quire a one-character lookbehind and cause PCRE2_INFO_MAXLOOKBEHIND to + return 1 in the absence of anything longer. \A also registers a one- + character lookbehind, though it does not actually inspect the previous character. Note that this information is useful for multi-segment matching only if - the pattern contains no nested lookbehinds. For example, the pattern - (?<=a(?<=ba)c) returns a maximum lookbehind of 2, but when it is - processed, the first lookbehind moves back by two characters, matches - one character, then the nested lookbehind also moves back by two char- - acters. This puts the matching point three characters earlier than it - was at the start. PCRE2_INFO_MAXLOOKBEHIND is really only useful as a - debugging tool. See the pcre2partial documentation for a discussion of + the pattern contains no nested lookbehinds. For example, the pattern + (?<=a(?<=ba)c) returns a maximum lookbehind of 2, but when it is + processed, the first lookbehind moves back by two characters, matches + one character, then the nested lookbehind also moves back by two char- + acters. This puts the matching point three characters earlier than it + was at the start. PCRE2_INFO_MAXLOOKBEHIND is really only useful as a + debugging tool. See the pcre2partial documentation for a discussion of multi-segment matching. PCRE2_INFO_MINLENGTH - If a minimum length for matching subject strings was computed, its + If a minimum length for matching subject strings was computed, its value is returned. Otherwise the returned value is 0. This value is not - computed when PCRE2_NO_START_OPTIMIZE is set. The value is a number of - characters, which in UTF mode may be different from the number of code - units. The third argument should point to a uint32_t variable. The - value is a lower bound to the length of any matching string. There may - not be any strings of that length that do actually match, but every + computed when PCRE2_NO_START_OPTIMIZE is set. The value is a number of + characters, which in UTF mode may be different from the number of code + units. The third argument should point to a uint32_t variable. The + value is a lower bound to the length of any matching string. There may + not be any strings of that length that do actually match, but every string that does match is at least that long. PCRE2_INFO_NAMECOUNT @@ -2605,51 +2615,51 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_INFO_NAMETABLE PCRE2 supports the use of named as well as numbered capturing parenthe- - ses. The names are just an additional way of identifying the parenthe- + ses. The names are just an additional way of identifying the parenthe- ses, which still acquire numbers. Several convenience functions such as - pcre2_substring_get_byname() are provided for extracting captured sub- - strings by name. It is also possible to extract the data directly, by - first converting the name to a number in order to access the correct - pointers in the output vector (described with pcre2_match() below). To + pcre2_substring_get_byname() are provided for extracting captured sub- + strings by name. It is also possible to extract the data directly, by + first converting the name to a number in order to access the correct + pointers in the output vector (described with pcre2_match() below). To do the conversion, you need to use the name-to-number map, which is de- scribed by these three values. - The map consists of a number of fixed-size entries. PCRE2_INFO_NAME- - COUNT gives the number of entries, and PCRE2_INFO_NAMEENTRYSIZE gives - the size of each entry in code units; both of these return a uint32_t + The map consists of a number of fixed-size entries. PCRE2_INFO_NAME- + COUNT gives the number of entries, and PCRE2_INFO_NAMEENTRYSIZE gives + the size of each entry in code units; both of these return a uint32_t value. The entry size depends on the length of the longest name. PCRE2_INFO_NAMETABLE returns a pointer to the first entry of the table. This is a PCRE2_SPTR pointer to a block of code units. In the 8-bit li- - brary, the first two bytes of each entry are the number of the captur- - ing parenthesis, most significant byte first. In the 16-bit library, - the pointer points to 16-bit code units, the first of which contains - the parenthesis number. In the 32-bit library, the pointer points to - 32-bit code units, the first of which contains the parenthesis number. + brary, the first two bytes of each entry are the number of the captur- + ing parenthesis, most significant byte first. In the 16-bit library, + the pointer points to 16-bit code units, the first of which contains + the parenthesis number. In the 32-bit library, the pointer points to + 32-bit code units, the first of which contains the parenthesis number. The rest of the entry is the corresponding name, zero terminated. - The names are in alphabetical order. If (?| is used to create multiple + The names are in alphabetical order. If (?| is used to create multiple capture groups with the same number, as described in the section on du- plicate group numbers in the pcre2pattern page, the groups may be given - the same name, but there is only one entry in the table. Different + the same name, but there is only one entry in the table. Different names for groups of the same number are not permitted. - Duplicate names for capture groups with different numbers are permit- + Duplicate names for capture groups with different numbers are permit- ted, but only if PCRE2_DUPNAMES is set. They appear in the table in the - order in which they were found in the pattern. In the absence of (?| - this is the order of increasing number; when (?| is used this is not - necessarily the case because later capture groups may have lower num- + order in which they were found in the pattern. In the absence of (?| + this is the order of increasing number; when (?| is used this is not + necessarily the case because later capture groups may have lower num- bers. - As a simple example of the name/number table, consider the following - pattern after compilation by the 8-bit library (assume PCRE2_EXTENDED + As a simple example of the name/number table, consider the following + pattern after compilation by the 8-bit library (assume PCRE2_EXTENDED is set, so white space - including newlines - is ignored): (? (?(\d\d)?\d\d) - (?\d\d) - (?\d\d) ) There are four named capture groups, so the table has four entries, and - each entry in the table is eight bytes long. The table is as follows, + each entry in the table is eight bytes long. The table is as follows, with non-printing bytes shows in hexadecimal, and undefined bytes shown as ??: @@ -2658,8 +2668,8 @@ INFORMATION ABOUT A COMPILED PATTERN 00 04 m o n t h 00 00 02 y e a r 00 ?? - When writing code to extract data from named capture groups using the - name-to-number map, remember that the length of the entries is likely + When writing code to extract data from named capture groups using the + name-to-number map, remember that the length of the entries is likely to be different for each compiled pattern. PCRE2_INFO_NEWLINE @@ -2678,14 +2688,14 @@ INFORMATION ABOUT A COMPILED PATTERN PCRE2_INFO_SIZE - Return the size of the compiled pattern in bytes (for all three li- - braries). The third argument should point to a size_t variable. This - value includes the size of the general data block that precedes the - code units of the compiled pattern itself. The value that is used when - pcre2_compile() is getting memory in which to place the compiled pat- + Return the size of the compiled pattern in bytes (for all three li- + braries). The third argument should point to a size_t variable. This + value includes the size of the general data block that precedes the + code units of the compiled pattern itself. The value that is used when + pcre2_compile() is getting memory in which to place the compiled pat- tern may be slightly larger than the value returned by this option, be- - cause there are cases where the code that calculates the size has to - over-estimate. Processing a pattern with the JIT compiler does not al- + cause there are cases where the code that calculates the size has to + over-estimate. Processing a pattern with the JIT compiler does not al- ter the value returned by this option. @@ -2696,30 +2706,30 @@ INFORMATION ABOUT A PATTERN'S CALLOUTS void *user_data); A script language that supports the use of string arguments in callouts - might like to scan all the callouts in a pattern before running the + might like to scan all the callouts in a pattern before running the match. This can be done by calling pcre2_callout_enumerate(). The first - argument is a pointer to a compiled pattern, the second points to a - callback function, and the third is arbitrary user data. The callback - function is called for every callout in the pattern in the order in + argument is a pointer to a compiled pattern, the second points to a + callback function, and the third is arbitrary user data. The callback + function is called for every callout in the pattern in the order in which they appear. Its first argument is a pointer to a callout enumer- - ation block, and its second argument is the user_data value that was - passed to pcre2_callout_enumerate(). The contents of the callout enu- - meration block are described in the pcre2callout documentation, which + ation block, and its second argument is the user_data value that was + passed to pcre2_callout_enumerate(). The contents of the callout enu- + meration block are described in the pcre2callout documentation, which also gives further details about callouts. SERIALIZATION AND PRECOMPILING - It is possible to save compiled patterns on disc or elsewhere, and re- + It is possible to save compiled patterns on disc or elsewhere, and re- load them later, subject to a number of restrictions. The host on which - the patterns are reloaded must be running the same version of PCRE2, - with the same code unit width, and must also have the same endianness, - pointer width, and PCRE2_SIZE type. Before compiled patterns can be + the patterns are reloaded must be running the same version of PCRE2, + with the same code unit width, and must also have the same endianness, + pointer width, and PCRE2_SIZE type. Before compiled patterns can be saved, they must be converted to a "serialized" form, which in the case of PCRE2 is really just a bytecode dump. The functions whose names be- gin with pcre2_serialize_ are used for converting to and from the seri- - alized form. They are described in the pcre2serialize documentation. - Note that PCRE2 serialization does not convert compiled patterns to an + alized form. They are described in the pcre2serialize documentation. + Note that PCRE2 serialization does not convert compiled patterns to an abstract format like Java or .NET serialization. @@ -2733,70 +2743,70 @@ THE MATCH DATA BLOCK void pcre2_match_data_free(pcre2_match_data *match_data); - Information about a successful or unsuccessful match is placed in a - match data block, which is an opaque structure that is accessed by - function calls. In particular, the match data block contains a vector + Information about a successful or unsuccessful match is placed in a + match data block, which is an opaque structure that is accessed by + function calls. In particular, the match data block contains a vector of offsets into the subject string that define the matched parts of the subject. This is known as the ovector. - Before calling pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match() + Before calling pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match() you must create a match data block by calling one of the creation func- - tions above. For pcre2_match_data_create(), the first argument is the + tions above. For pcre2_match_data_create(), the first argument is the number of pairs of offsets in the ovector. - When using pcre2_match(), one pair of offsets is required to identify - the string that matched the whole pattern, with an additional pair for + When using pcre2_match(), one pair of offsets is required to identify + the string that matched the whole pattern, with an additional pair for each captured substring. For example, a value of 4 creates enough space - to record the matched portion of the subject plus three captured sub- + to record the matched portion of the subject plus three captured sub- strings. - When using pcre2_dfa_match() there may be multiple matched substrings - of different lengths at the same point in the subject. The ovector + When using pcre2_dfa_match() there may be multiple matched substrings + of different lengths at the same point in the subject. The ovector should be made large enough to hold as many as are expected. - A minimum of at least 1 pair is imposed by pcre2_match_data_create(), - so it is always possible to return the overall matched string in the - case of pcre2_match() or the longest match in the case of - pcre2_dfa_match(). The maximum number of pairs is 65535; if the first - argument of pcre2_match_data_create() is greater than this, 65535 is + A minimum of at least 1 pair is imposed by pcre2_match_data_create(), + so it is always possible to return the overall matched string in the + case of pcre2_match() or the longest match in the case of + pcre2_dfa_match(). The maximum number of pairs is 65535; if the first + argument of pcre2_match_data_create() is greater than this, 65535 is used. The second argument of pcre2_match_data_create() is a pointer to a gen- - eral context, which can specify custom memory management for obtaining + eral context, which can specify custom memory management for obtaining the memory for the match data block. If you are not using custom memory management, pass NULL, which causes malloc() to be used. - For pcre2_match_data_create_from_pattern(), the first argument is a + For pcre2_match_data_create_from_pattern(), the first argument is a pointer to a compiled pattern. The ovector is created to be exactly the - right size to hold all the substrings a pattern might capture when + right size to hold all the substrings a pattern might capture when matched using pcre2_match(). You should not use this call when matching - with pcre2_dfa_match(). The second argument is again a pointer to a - general context, but in this case if NULL is passed, the memory is ob- - tained using the same allocator that was used for the compiled pattern + with pcre2_dfa_match(). The second argument is again a pointer to a + general context, but in this case if NULL is passed, the memory is ob- + tained using the same allocator that was used for the compiled pattern (custom or default). - A match data block can be used many times, with the same or different - compiled patterns. You can extract information from a match data block - after a match operation has finished, using functions that are de- + A match data block can be used many times, with the same or different + compiled patterns. You can extract information from a match data block + after a match operation has finished, using functions that are de- scribed in the sections on matched strings and other match data below. - When a call of pcre2_match() fails, valid data is available in the - match block only when the error is PCRE2_ERROR_NOMATCH, PCRE2_ER- - ROR_PARTIAL, or one of the error codes for an invalid UTF string. Ex- + When a call of pcre2_match() fails, valid data is available in the + match block only when the error is PCRE2_ERROR_NOMATCH, PCRE2_ER- + ROR_PARTIAL, or one of the error codes for an invalid UTF string. Ex- actly what is available depends on the error, and is detailed below. - When one of the matching functions is called, pointers to the compiled - pattern and the subject string are set in the match data block so that - they can be referenced by the extraction functions after a successful + When one of the matching functions is called, pointers to the compiled + pattern and the subject string are set in the match data block so that + they can be referenced by the extraction functions after a successful match. After running a match, you must not free a compiled pattern or a - subject string until after all operations on the match data block (for - that match) have taken place, unless, in the case of the subject - string, you have used the PCRE2_COPY_MATCHED_SUBJECT option, which is - described in the section entitled "Option bits for pcre2_match()" be- + subject string until after all operations on the match data block (for + that match) have taken place, unless, in the case of the subject + string, you have used the PCRE2_COPY_MATCHED_SUBJECT option, which is + described in the section entitled "Option bits for pcre2_match()" be- low. - When a match data block itself is no longer needed, it should be freed - by calling pcre2_match_data_free(). If this function is called with a + When a match data block itself is no longer needed, it should be freed + by calling pcre2_match_data_free(). If this function is called with a NULL argument, it returns immediately, without doing anything. @@ -2807,27 +2817,27 @@ MEMORY USE FOR MATCH DATA BLOCKS PCRE2_SIZE pcre2_get_match_data_heapframes_size( pcre2_match_data *match_data); - The size of a match data block depends on the size of the ovector that + The size of a match data block depends on the size of the ovector that it contains. The function pcre2_get_match_data_size() returns the size, in bytes, of the block that is its argument. When pcre2_match() runs interpretively (that is, without using JIT), it makes use of a vector of data frames for remembering backtracking posi- tions. The size of each individual frame depends on the number of cap- - turing parentheses in the pattern and can be obtained by calling + turing parentheses in the pattern and can be obtained by calling pcre2_pattern_info() with the PCRE2_INFO_FRAMESIZE option (see the sec- tion entitled "Information about a compiled pattern" above). - Heap memory is used for the frames vector; if the initial memory block - turns out to be too small during matching, it is automatically ex- - panded. When pcre2_match() returns, the memory is not freed, but re- - mains attached to the match data block, for use by any subsequent - matches that use the same block. It is automatically freed when the + Heap memory is used for the frames vector; if the initial memory block + turns out to be too small during matching, it is automatically ex- + panded. When pcre2_match() returns, the memory is not freed, but re- + mains attached to the match data block, for use by any subsequent + matches that use the same block. It is automatically freed when the match data block itself is freed. - You can find the current size of the frames vector that a match data - block owns by calling pcre2_get_match_data_heapframes_size(). For a - newly created match data block the size will be zero. Some types of + You can find the current size of the frames vector that a match data + block owns by calling pcre2_get_match_data_heapframes_size(). For a + newly created match data block the size will be zero. Some types of match may require a lot of frames and thus a large vector; applications that run in environments where memory is constrained can check this and free the match data block if the heap frames vector has become too big. @@ -2840,15 +2850,15 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION uint32_t options, pcre2_match_data *match_data, pcre2_match_context *mcontext); - The function pcre2_match() is called to match a subject string against - a compiled pattern, which is passed in the code argument. You can call + The function pcre2_match() is called to match a subject string against + a compiled pattern, which is passed in the code argument. You can call pcre2_match() with the same code argument as many times as you like, in - order to find multiple matches in the subject string or to match dif- + order to find multiple matches in the subject string or to match dif- ferent subject strings with the same pattern. - This function is the main matching facility of the library, and it op- - erates in a Perl-like manner. For specialist use there is also an al- - ternative matching function, which is described below in the section + This function is the main matching facility of the library, and it op- + erates in a Perl-like manner. For specialist use there is also an al- + ternative matching function, which is described below in the section about the pcre2_dfa_match() function. Here is an example of a simple call to pcre2_match(): @@ -2863,231 +2873,231 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION md, /* the match data block */ NULL); /* a match context; NULL means use defaults */ - If the subject string is zero-terminated, the length can be given as + If the subject string is zero-terminated, the length can be given as PCRE2_ZERO_TERMINATED. A match context must be provided if certain less common matching parameters are to be changed. For details, see the sec- tion on the match context above. The string to be matched by pcre2_match() - The subject string is passed to pcre2_match() as a pointer in subject, - a length in length, and a starting offset in startoffset. The length - and offset are in code units, not characters. That is, they are in - bytes for the 8-bit library, 16-bit code units for the 16-bit library, - and 32-bit code units for the 32-bit library, whether or not UTF pro- + The subject string is passed to pcre2_match() as a pointer in subject, + a length in length, and a starting offset in startoffset. The length + and offset are in code units, not characters. That is, they are in + bytes for the 8-bit library, 16-bit code units for the 16-bit library, + and 32-bit code units for the 32-bit library, whether or not UTF pro- cessing is enabled. As a special case, if subject is NULL and length is - zero, the subject is assumed to be an empty string. If length is non- + zero, the subject is assumed to be an empty string. If length is non- zero, an error occurs if subject is NULL. If startoffset is greater than the length of the subject, pcre2_match() - returns PCRE2_ERROR_BADOFFSET. When the starting offset is zero, the - search for a match starts at the beginning of the subject, and this is + returns PCRE2_ERROR_BADOFFSET. When the starting offset is zero, the + search for a match starts at the beginning of the subject, and this is by far the most common case. In UTF-8 or UTF-16 mode, the starting off- - set must point to the start of a character, or to the end of the sub- - ject (in UTF-32 mode, one code unit equals one character, so all off- - sets are valid). Like the pattern string, the subject may contain bi- + set must point to the start of a character, or to the end of the sub- + ject (in UTF-32 mode, one code unit equals one character, so all off- + sets are valid). Like the pattern string, the subject may contain bi- nary zeros. - A non-zero starting offset is useful when searching for another match - in the same subject by calling pcre2_match() again after a previous - success. Setting startoffset differs from passing over a shortened - string and setting PCRE2_NOTBOL in the case of a pattern that begins + A non-zero starting offset is useful when searching for another match + in the same subject by calling pcre2_match() again after a previous + success. Setting startoffset differs from passing over a shortened + string and setting PCRE2_NOTBOL in the case of a pattern that begins with any kind of lookbehind. For example, consider the pattern \Biss\B - which finds occurrences of "iss" in the middle of words. (\B matches - only if the current position in the subject is not a word boundary.) - When applied to the string "Mississippi" the first call to - pcre2_match() finds the first occurrence. If pcre2_match() is called + which finds occurrences of "iss" in the middle of words. (\B matches + only if the current position in the subject is not a word boundary.) + When applied to the string "Mississippi" the first call to + pcre2_match() finds the first occurrence. If pcre2_match() is called again with just the remainder of the subject, namely "issippi", it does - not match, because \B is always false at the start of the subject, - which is deemed to be a word boundary. However, if pcre2_match() is + not match, because \B is always false at the start of the subject, + which is deemed to be a word boundary. However, if pcre2_match() is passed the entire string again, but with startoffset set to 4, it finds - the second occurrence of "iss" because it is able to look behind the + the second occurrence of "iss" because it is able to look behind the starting point to discover that it is preceded by a letter. - Finding all the matches in a subject is tricky when the pattern can + Finding all the matches in a subject is tricky when the pattern can match an empty string. PCRE2 includes a helper API to assist with this; - see the section entitled "Iterating over all matches" below for de- + see the section entitled "Iterating over all matches" below for de- tails. If a non-zero starting offset is passed when the pattern is anchored, a single attempt to match at the given offset is made. This can only suc- - ceed if the pattern does not require the match to be at the start of - the subject. In other words, the anchoring must be the result of set- - ting the PCRE2_ANCHORED option or the use of .* with PCRE2_DOTALL, not + ceed if the pattern does not require the match to be at the start of + the subject. In other words, the anchoring must be the result of set- + ting the PCRE2_ANCHORED option or the use of .* with PCRE2_DOTALL, not by starting the pattern with ^ or \A. Option bits for pcre2_match() The unused bits of the options argument for pcre2_match() must be zero. - The only bits that may be set are PCRE2_ANCHORED, - PCRE2_COPY_MATCHED_SUBJECT, PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_EN- - DANCHORED, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY, + The only bits that may be set are PCRE2_ANCHORED, + PCRE2_COPY_MATCHED_SUBJECT, PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_EN- + DANCHORED, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY, PCRE2_NOTEMPTY_ATSTART, PCRE2_NO_JIT, PCRE2_NO_UTF_CHECK, PCRE2_PAR- TIAL_HARD, and PCRE2_PARTIAL_SOFT. Their action is described below. - Setting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is not sup- - ported by the just-in-time (JIT) compiler. If it is set, JIT matching + Setting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is not sup- + ported by the just-in-time (JIT) compiler. If it is set, JIT matching is disabled and the interpretive code in pcre2_match() is run. - PCRE2_DISABLE_RECURSELOOP_CHECK is ignored by JIT, but apart from - PCRE2_NO_JIT (obviously), the remaining options are supported for JIT + PCRE2_DISABLE_RECURSELOOP_CHECK is ignored by JIT, but apart from + PCRE2_NO_JIT (obviously), the remaining options are supported for JIT matching. PCRE2_ANCHORED The PCRE2_ANCHORED option limits pcre2_match() to matching at the first - matching position. If a pattern was compiled with PCRE2_ANCHORED, or - turned out to be anchored by virtue of its contents, it cannot be made + matching position. If a pattern was compiled with PCRE2_ANCHORED, or + turned out to be anchored by virtue of its contents, it cannot be made unanchored at matching time. Note that setting the option at match time disables JIT matching. PCRE2_COPY_MATCHED_SUBJECT - By default, a pointer to the subject is remembered in the match data - block so that, after a successful match, it can be referenced by the - substring extraction functions. This means that the subject's memory - must not be freed until all such operations are complete. For some ap- - plications where the lifetime of the subject string is not guaranteed, - it may be necessary to make a copy of the subject string, but it is - wasteful to do this unless the match is successful. After a successful - match, if PCRE2_COPY_MATCHED_SUBJECT is set, the subject is copied and - the new pointer is remembered in the match data block instead of the - original subject pointer. The memory allocator that was used for the - match block itself is used. The copy is automatically freed when - pcre2_match_data_free() is called to free the match data block. It is + By default, a pointer to the subject is remembered in the match data + block so that, after a successful match, it can be referenced by the + substring extraction functions. This means that the subject's memory + must not be freed until all such operations are complete. For some ap- + plications where the lifetime of the subject string is not guaranteed, + it may be necessary to make a copy of the subject string, but it is + wasteful to do this unless the match is successful. After a successful + match, if PCRE2_COPY_MATCHED_SUBJECT is set, the subject is copied and + the new pointer is remembered in the match data block instead of the + original subject pointer. The memory allocator that was used for the + match block itself is used. The copy is automatically freed when + pcre2_match_data_free() is called to free the match data block. It is also automatically freed if the match data block is re-used for another match operation. PCRE2_DISABLE_RECURSELOOP_CHECK - This option is relevant only to pcre2_match() for interpretive match- - ing. It is ignored when JIT is used, and is forbidden for + This option is relevant only to pcre2_match() for interpretive match- + ing. It is ignored when JIT is used, and is forbidden for pcre2_dfa_match(). The use of recursion in patterns can lead to infinite loops. In the in- - terpretive matcher these would be eventually caught by the match or + terpretive matcher these would be eventually caught by the match or heap limits, but this could take a long time and/or use a lot of memory - if the limits are large. There is therefore a check at the start of - each recursion. If the same group is still active from a previous - call, and the current subject pointer is the same as it was at the - start of that group, and the furthest inspected character of the sub- + if the limits are large. There is therefore a check at the start of + each recursion. If the same group is still active from a previous + call, and the current subject pointer is the same as it was at the + start of that group, and the furthest inspected character of the sub- ject has not changed, an error is generated. - There are rare cases of matches that would complete, but nevertheless - trigger this error. This option disables the check. It is provided + There are rare cases of matches that would complete, but nevertheless + trigger this error. This option disables the check. It is provided mainly for testing when comparing JIT and interpretive behaviour. PCRE2_ENDANCHORED - If the PCRE2_ENDANCHORED option is set, any string that pcre2_match() - matches must be right at the end of the subject string. Note that set- + If the PCRE2_ENDANCHORED option is set, any string that pcre2_match() + matches must be right at the end of the subject string. Note that set- ting the option at match time disables JIT matching. PCRE2_NOTBOL This option specifies that first character of the subject string is not - the beginning of a line, so the circumflex metacharacter should not - match before it. Setting this without having set PCRE2_MULTILINE at + the beginning of a line, so the circumflex metacharacter should not + match before it. Setting this without having set PCRE2_MULTILINE at compile time causes circumflex never to match. This option affects only the behaviour of the circumflex metacharacter. It does not affect \A. PCRE2_NOTEOL This option specifies that the end of the subject string is not the end - of a line, so the dollar metacharacter should not match it nor (except - in multiline mode) a newline immediately before it. Setting this with- - out having set PCRE2_MULTILINE at compile time causes dollar never to + of a line, so the dollar metacharacter should not match it nor (except + in multiline mode) a newline immediately before it. Setting this with- + out having set PCRE2_MULTILINE at compile time causes dollar never to match. This option affects only the behaviour of the dollar metacharac- ter. It does not affect \Z or \z. PCRE2_NOTEMPTY An empty string is not considered to be a valid match if this option is - set. If there are alternatives in the pattern, they are tried. If all - the alternatives match the empty string, the entire match fails. For + set. If there are alternatives in the pattern, they are tried. If all + the alternatives match the empty string, the entire match fails. For example, if the pattern a?b? - is applied to a string not beginning with "a" or "b", it matches an + is applied to a string not beginning with "a" or "b", it matches an empty string at the start of the subject. With PCRE2_NOTEMPTY set, this - match is not valid, so pcre2_match() searches further into the string + match is not valid, so pcre2_match() searches further into the string for occurrences of "a" or "b". PCRE2_NOTEMPTY_ATSTART - This is like PCRE2_NOTEMPTY, except that it locks out an empty string + This is like PCRE2_NOTEMPTY, except that it locks out an empty string match only at the first matching position, that is, at the start of the - subject plus the starting offset. An empty string match later in the + subject plus the starting offset. An empty string match later in the subject is permitted. If the pattern is anchored, such a match can oc- cur only if the pattern contains \K. PCRE2_NO_JIT - By default, if a pattern has been successfully processed by - pcre2_jit_compile(), JIT is automatically used when pcre2_match() is - called with options that JIT supports. Setting PCRE2_NO_JIT disables + By default, if a pattern has been successfully processed by + pcre2_jit_compile(), JIT is automatically used when pcre2_match() is + called with options that JIT supports. Setting PCRE2_NO_JIT disables the use of JIT; it forces matching to be done by the interpreter. PCRE2_NO_UTF_CHECK When PCRE2_UTF is set at compile time, the validity of the subject as a - UTF string is checked unless PCRE2_NO_UTF_CHECK is passed to + UTF string is checked unless PCRE2_NO_UTF_CHECK is passed to pcre2_match() or PCRE2_MATCH_INVALID_UTF was passed to pcre2_compile(). The latter special case is discussed in detail in the pcre2unicode doc- umentation. - In the default case, if a non-zero starting offset is given, the check - is applied only to that part of the subject that could be inspected - during matching, and there is a check that the starting offset points - to the first code unit of a character or to the end of the subject. If - there are no lookbehind assertions in the pattern, the check starts at + In the default case, if a non-zero starting offset is given, the check + is applied only to that part of the subject that could be inspected + during matching, and there is a check that the starting offset points + to the first code unit of a character or to the end of the subject. If + there are no lookbehind assertions in the pattern, the check starts at the starting offset. Otherwise, it starts at the length of the longest - lookbehind before the starting offset, or at the start of the subject - if there are not that many characters before the starting offset. Note + lookbehind before the starting offset, or at the start of the subject + if there are not that many characters before the starting offset. Note that the sequences \b and \B are one-character lookbehinds. The check is carried out before any other processing takes place, and a - negative error code is returned if the check fails. There are several - UTF error codes for each code unit width, corresponding to different - problems with the code unit sequence. There are discussions about the - validity of UTF-8 strings, UTF-16 strings, and UTF-32 strings in the + negative error code is returned if the check fails. There are several + UTF error codes for each code unit width, corresponding to different + problems with the code unit sequence. There are discussions about the + validity of UTF-8 strings, UTF-16 strings, and UTF-32 strings in the pcre2unicode documentation. If you know that your subject is valid, and you want to skip this check for performance reasons, you can set the PCRE2_NO_UTF_CHECK option when - calling pcre2_match(). You might want to do this for the second and - subsequent calls to pcre2_match() if you are making repeated calls to + calling pcre2_match(). You might want to do this for the second and + subsequent calls to pcre2_match() if you are making repeated calls to find multiple matches in the same subject string. - Warning: Unless PCRE2_MATCH_INVALID_UTF was set at compile time, when - PCRE2_NO_UTF_CHECK is set at match time the effect of passing an in- + Warning: Unless PCRE2_MATCH_INVALID_UTF was set at compile time, when + PCRE2_NO_UTF_CHECK is set at match time the effect of passing an in- valid string as a subject, or an invalid value of startoffset, is unde- - fined. Your program may crash or loop indefinitely or give wrong re- + fined. Your program may crash or loop indefinitely or give wrong re- sults. PCRE2_PARTIAL_HARD PCRE2_PARTIAL_SOFT These options turn on the partial matching feature. A partial match oc- - curs if the end of the subject string is reached successfully, but + curs if the end of the subject string is reached successfully, but there are not enough subject characters to complete the match. In addi- - tion, either at least one character must have been inspected or the - pattern must contain a lookbehind, or the pattern must be one that + tion, either at least one character must have been inspected or the + pattern must contain a lookbehind, or the pattern must be one that could match an empty string. - If this situation arises when PCRE2_PARTIAL_SOFT (but not PCRE2_PAR- + If this situation arises when PCRE2_PARTIAL_SOFT (but not PCRE2_PAR- TIAL_HARD) is set, matching continues by testing any remaining alterna- - tives. Only if no complete match can be found is PCRE2_ERROR_PARTIAL - returned instead of PCRE2_ERROR_NOMATCH. In other words, PCRE2_PAR- - TIAL_SOFT specifies that the caller is prepared to handle a partial + tives. Only if no complete match can be found is PCRE2_ERROR_PARTIAL + returned instead of PCRE2_ERROR_NOMATCH. In other words, PCRE2_PAR- + TIAL_SOFT specifies that the caller is prepared to handle a partial match, but only if no complete match can be found. - If PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In this - case, if a partial match is found, pcre2_match() immediately returns - PCRE2_ERROR_PARTIAL, without considering any other alternatives. In + If PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In this + case, if a partial match is found, pcre2_match() immediately returns + PCRE2_ERROR_PARTIAL, without considering any other alternatives. In other words, when PCRE2_PARTIAL_HARD is set, a partial match is consid- ered to be more important than an alternative complete match. @@ -3097,38 +3107,38 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION NEWLINE HANDLING WHEN MATCHING - When PCRE2 is built, a default newline convention is set; this is usu- - ally the standard convention for the operating system. The default can - be overridden in a compile context by calling pcre2_set_newline(). It - can also be overridden by starting a pattern string with, for example, - (*CRLF), as described in the section on newline conventions in the - pcre2pattern page. During matching, the newline choice affects the be- - haviour of the dot, circumflex, and dollar metacharacters. It may also - alter the way the match starting position is advanced after a match + When PCRE2 is built, a default newline convention is set; this is usu- + ally the standard convention for the operating system. The default can + be overridden in a compile context by calling pcre2_set_newline(). It + can also be overridden by starting a pattern string with, for example, + (*CRLF), as described in the section on newline conventions in the + pcre2pattern page. During matching, the newline choice affects the be- + haviour of the dot, circumflex, and dollar metacharacters. It may also + alter the way the match starting position is advanced after a match failure for an unanchored pattern. When PCRE2_NEWLINE_CRLF, PCRE2_NEWLINE_ANYCRLF, or PCRE2_NEWLINE_ANY is - set as the newline convention, and a match attempt for an unanchored + set as the newline convention, and a match attempt for an unanchored pattern fails when the current starting position is at a CRLF sequence, - and the pattern contains no explicit matches for CR or LF characters, - the match position is advanced by two characters instead of one, in + and the pattern contains no explicit matches for CR or LF characters, + the match position is advanced by two characters instead of one, in other words, to after the CRLF. The above rule is a compromise that makes the most common cases work as - expected. For example, if the pattern is .+A (and the PCRE2_DOTALL op- - tion is not set), it does not match the string "\r\nA" because, after - failing at the start, it skips both the CR and the LF before retrying. - However, the pattern [\r\n]A does match that string, because it con- + expected. For example, if the pattern is .+A (and the PCRE2_DOTALL op- + tion is not set), it does not match the string "\r\nA" because, after + failing at the start, it skips both the CR and the LF before retrying. + However, the pattern [\r\n]A does match that string, because it con- tains an explicit CR or LF reference, and so advances only by one char- acter after the first failure. An explicit match for CR of LF is either a literal appearance of one of - those characters in the pattern, or one of the \r or \n or equivalent + those characters in the pattern, or one of the \r or \n or equivalent octal or hexadecimal escape sequences. Implicit matches such as [^X] do - not count, nor does \s, even though it includes CR and LF in the char- + not count, nor does \s, even though it includes CR and LF in the char- acters that it matches. - Notwithstanding the above, anomalous effects may still occur when CRLF + Notwithstanding the above, anomalous effects may still occur when CRLF is a valid newline sequence and explicit \r or \n escapes appear in the pattern. @@ -3139,83 +3149,83 @@ HOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *match_data); - In general, a pattern matches a certain portion of the subject, and in - addition, further substrings from the subject may be picked out by - parenthesized parts of the pattern. Following the usage in Jeffrey - Friedl's book, this is called "capturing" in what follows, and the - phrase "capture group" (Perl terminology) is used for a fragment of a - pattern that picks out a substring. PCRE2 supports several other kinds + In general, a pattern matches a certain portion of the subject, and in + addition, further substrings from the subject may be picked out by + parenthesized parts of the pattern. Following the usage in Jeffrey + Friedl's book, this is called "capturing" in what follows, and the + phrase "capture group" (Perl terminology) is used for a fragment of a + pattern that picks out a substring. PCRE2 supports several other kinds of parenthesized group that do not cause substrings to be captured. The - pcre2_pattern_info() function can be used to find out how many capture + pcre2_pattern_info() function can be used to find out how many capture groups there are in a compiled pattern. - You can use auxiliary functions for accessing captured substrings by + You can use auxiliary functions for accessing captured substrings by number or by name, as described in sections below. Alternatively, you can make direct use of the vector of PCRE2_SIZE val- - ues, called the ovector, which contains the offsets of captured - strings. It is part of the match data block. The function - pcre2_get_ovector_pointer() returns the address of the ovector, and + ues, called the ovector, which contains the offsets of captured + strings. It is part of the match data block. The function + pcre2_get_ovector_pointer() returns the address of the ovector, and pcre2_get_ovector_count() returns the number of pairs of values it con- tains. Within the ovector, the first in each pair of values is set to the off- set of the first code unit of a substring, and the second is set to the - offset of the first code unit after the end of a substring. These val- - ues are always code unit offsets, not character offsets. That is, they + offset of the first code unit after the end of a substring. These val- + ues are always code unit offsets, not character offsets. That is, they are byte offsets in the 8-bit library, 16-bit offsets in the 16-bit li- brary, and 32-bit offsets in the 32-bit library. - After a partial match (error return PCRE2_ERROR_PARTIAL), only the - first pair of offsets (that is, ovector[0] and ovector[1]) are set. - They identify the part of the subject that was partially matched. See + After a partial match (error return PCRE2_ERROR_PARTIAL), only the + first pair of offsets (that is, ovector[0] and ovector[1]) are set. + They identify the part of the subject that was partially matched. See the pcre2partial documentation for details of partial matching. - After a fully successful match, the first pair of offsets identifies - the portion of the subject string that was matched by the entire pat- - tern. The next pair is used for the first captured substring, and so - on. The value returned by pcre2_match() is one more than the highest - numbered pair that has been set. For example, if two substrings have - been captured, the returned value is 3. If there are no captured sub- + After a fully successful match, the first pair of offsets identifies + the portion of the subject string that was matched by the entire pat- + tern. The next pair is used for the first captured substring, and so + on. The value returned by pcre2_match() is one more than the highest + numbered pair that has been set. For example, if two substrings have + been captured, the returned value is 3. If there are no captured sub- strings, the return value from a successful match is 1, indicating that just the first pair of offsets has been set. - If a pattern uses the \K escape sequence within a positive lookahead + If a pattern uses the \K escape sequence within a positive lookahead assertion, the reported start of a successful match can be greater than - the end of the match. For example, if the pattern (?=ab\K) is matched - against "ab", the start and end offset values for the match are 2 and + the end of the match. For example, if the pattern (?=ab\K) is matched + against "ab", the start and end offset values for the match are 2 and 0. - If a capture group is matched repeatedly within a single match opera- + If a capture group is matched repeatedly within a single match opera- tion, it is the last portion of the subject that it matched that is re- turned. If the ovector is too small to hold all the captured substring offsets, - as much as possible is filled in, and the function returns a value of - zero. If captured substrings are not of interest, pcre2_match() may be + as much as possible is filled in, and the function returns a value of + zero. If captured substrings are not of interest, pcre2_match() may be called with a match data block whose ovector is of minimum length (that is, one pair). - It is possible for capture group number n+1 to match some part of the - subject when group n has not been used at all. For example, if the + It is possible for capture group number n+1 to match some part of the + subject when group n has not been used at all. For example, if the string "abc" is matched against the pattern (a|(z))(bc) the return from - the function is 4, and groups 1 and 3 are matched, but 2 is not. When - this happens, both values in the offset pairs corresponding to unused + the function is 4, and groups 1 and 3 are matched, but 2 is not. When + this happens, both values in the offset pairs corresponding to unused groups are set to PCRE2_UNSET. - Offset values that correspond to unused groups at the end of the ex- - pression are also set to PCRE2_UNSET. For example, if the string "abc" - is matched against the pattern (abc)(x(yz)?)? groups 2 and 3 are not - matched. The return from the function is 2, because the highest used + Offset values that correspond to unused groups at the end of the ex- + pression are also set to PCRE2_UNSET. For example, if the string "abc" + is matched against the pattern (abc)(x(yz)?)? groups 2 and 3 are not + matched. The return from the function is 2, because the highest used capture group number is 1. The offsets for the second and third capture - groups (assuming the vector is large enough, of course) are set to + groups (assuming the vector is large enough, of course) are set to PCRE2_UNSET. Elements in the ovector that do not correspond to capturing parentheses in the pattern are never changed. That is, if a pattern contains n cap- turing parentheses, no more than ovector[0] to ovector[2n+1] are set by - pcre2_match(). The other elements retain whatever values they previ- - ously had. After a failed match attempt, the contents of the ovector + pcre2_match(). The other elements retain whatever values they previ- + ously had. After a failed match attempt, the contents of the ovector are unchanged. @@ -3225,69 +3235,69 @@ OTHER INFORMATION ABOUT A MATCH PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *match_data); - As well as the offsets in the ovector, other information about a match - is retained in the match data block and can be retrieved by the above - functions in appropriate circumstances. If they are called at other + As well as the offsets in the ovector, other information about a match + is retained in the match data block and can be retrieved by the above + functions in appropriate circumstances. If they are called at other times, the result is undefined. - After a successful match, a partial match (PCRE2_ERROR_PARTIAL), or a - failure to match (PCRE2_ERROR_NOMATCH), a mark name may be available. - The function pcre2_get_mark() can be called to access this name, which - can be specified in the pattern by any of the backtracking control + After a successful match, a partial match (PCRE2_ERROR_PARTIAL), or a + failure to match (PCRE2_ERROR_NOMATCH), a mark name may be available. + The function pcre2_get_mark() can be called to access this name, which + can be specified in the pattern by any of the backtracking control verbs, not just (*MARK). The same function applies to all the verbs. It returns a pointer to the zero-terminated name, which is within the com- piled pattern. If no name is available, NULL is returned. The length of - the name (excluding the terminating zero) is stored in the code unit - that precedes the name. You should use this length instead of relying + the name (excluding the terminating zero) is stored in the code unit + that precedes the name. You should use this length instead of relying on the terminating zero if the name might contain a binary zero. - After a successful match, the name that is returned is the last mark + After a successful match, the name that is returned is the last mark name encountered on the matching path through the pattern. Instances of - backtracking verbs without names do not count. Thus, for example, if + backtracking verbs without names do not count. Thus, for example, if the matching path contains (*MARK:A)(*PRUNE), the name "A" is returned. After a "no match" or a partial match, the last encountered name is re- turned. For example, consider this pattern: ^(*MARK:A)((*MARK:B)a|b)c - When it matches "bc", the returned name is A. The B mark is "seen" in - the first branch of the group, but it is not on the matching path. On - the other hand, when this pattern fails to match "bx", the returned + When it matches "bc", the returned name is A. The B mark is "seen" in + the first branch of the group, but it is not on the matching path. On + the other hand, when this pattern fails to match "bx", the returned name is B. - Warning: By default, certain start-of-match optimizations are used to - give a fast "no match" result in some situations. For example, if the - anchoring is removed from the pattern above, there is an initial check - for the presence of "c" in the subject before running the matching en- + Warning: By default, certain start-of-match optimizations are used to + give a fast "no match" result in some situations. For example, if the + anchoring is removed from the pattern above, there is an initial check + for the presence of "c" in the subject before running the matching en- gine. This check fails for "bx", causing a match failure without seeing - any marks. You can disable the start-of-match optimizations by setting - the PCRE2_NO_START_OPTIMIZE option for pcre2_compile() or by starting + any marks. You can disable the start-of-match optimizations by setting + the PCRE2_NO_START_OPTIMIZE option for pcre2_compile() or by starting the pattern with (*NO_START_OPT). - After a successful match, a partial match, or one of the invalid UTF - errors (for example, PCRE2_ERROR_UTF8_ERR5), pcre2_get_startchar() can + After a successful match, a partial match, or one of the invalid UTF + errors (for example, PCRE2_ERROR_UTF8_ERR5), pcre2_get_startchar() can be called. After a successful or partial match it returns the code unit - offset of the character at which the match started. For a non-partial - match, this can be different to the value of ovector[0] if the pattern - contains the \K escape sequence. After a partial match, however, this - value is always the same as ovector[0] because \K does not affect the + offset of the character at which the match started. For a non-partial + match, this can be different to the value of ovector[0] if the pattern + contains the \K escape sequence. After a partial match, however, this + value is always the same as ovector[0] because \K does not affect the result of a partial match. - After a UTF check failure, pcre2_get_startchar() can be used to obtain + After a UTF check failure, pcre2_get_startchar() can be used to obtain the code unit offset of the invalid UTF character. Details are given in the pcre2unicode page. ERROR RETURNS FROM pcre2_match() - If pcre2_match() fails, it returns a negative number. This can be con- - verted to a text string by calling the pcre2_get_error_message() func- - tion (see "Obtaining a textual error message" below). Negative error - codes are also returned by other functions, and are documented with - them. The codes are given names in the header file. If UTF checking is + If pcre2_match() fails, it returns a negative number. This can be con- + verted to a text string by calling the pcre2_get_error_message() func- + tion (see "Obtaining a textual error message" below). Negative error + codes are also returned by other functions, and are documented with + them. The codes are given names in the header file. If UTF checking is in force and an invalid UTF subject string is detected, one of a number - of UTF-specific negative error codes is returned. Details are given in - the pcre2unicode page. The following are the other errors that may be + of UTF-specific negative error codes is returned. Details are given in + the pcre2unicode page. The following are the other errors that may be returned by pcre2_match(): PCRE2_ERROR_NOMATCH @@ -3296,20 +3306,20 @@ ERROR RETURNS FROM pcre2_match() PCRE2_ERROR_PARTIAL - The subject string did not match, but it did match partially. See the + The subject string did not match, but it did match partially. See the pcre2partial documentation for details of partial matching. PCRE2_ERROR_BADMAGIC PCRE2 stores a 4-byte "magic number" at the start of the compiled code, - to catch the case when it is passed a junk pointer. This is the error + to catch the case when it is passed a junk pointer. This is the error that is returned when the magic number is not present. PCRE2_ERROR_BADMODE - This error is given when a compiled pattern is passed to a function in - a library of a different code unit width, for example, a pattern com- - piled by the 8-bit library is passed to a 16-bit or 32-bit library + This error is given when a compiled pattern is passed to a function in + a library of a different code unit width, for example, a pattern com- + piled by the 8-bit library is passed to a 16-bit or 32-bit library function. PCRE2_ERROR_BADOFFSET @@ -3323,15 +3333,15 @@ ERROR RETURNS FROM pcre2_match() PCRE2_ERROR_BADUTFOFFSET The UTF code unit sequence that was passed as a subject was checked and - found to be valid (the PCRE2_NO_UTF_CHECK option was not set), but the - value of startoffset did not point to the beginning of a UTF character + found to be valid (the PCRE2_NO_UTF_CHECK option was not set), but the + value of startoffset did not point to the beginning of a UTF character or the end of the subject. PCRE2_ERROR_CALLOUT - This error is never generated by pcre2_match() itself. It is provided - for use by callout functions that want to cause pcre2_match() or - pcre2_callout_enumerate() to return a distinctive error code. See the + This error is never generated by pcre2_match() itself. It is provided + for use by callout functions that want to cause pcre2_match() or + pcre2_callout_enumerate() to return a distinctive error code. See the pcre2callout documentation for details. PCRE2_ERROR_DEPTHLIMIT @@ -3344,14 +3354,14 @@ ERROR RETURNS FROM pcre2_match() PCRE2_ERROR_INTERNAL - An unexpected internal error has occurred. This error could be caused + An unexpected internal error has occurred. This error could be caused by a bug in PCRE2 or by overwriting of the compiled pattern. PCRE2_ERROR_JIT_STACKLIMIT This error is returned when a pattern that was successfully studied us- ing JIT is being matched, but the memory available for the just-in-time - processing stack is not large enough. See the pcre2jit documentation + processing stack is not large enough. See the pcre2jit documentation for more details. PCRE2_ERROR_MATCHLIMIT @@ -3360,11 +3370,11 @@ ERROR RETURNS FROM pcre2_match() PCRE2_ERROR_NOMEMORY - Heap memory is used to remember backtracking points. This error is - given when the memory allocation function (default or custom) fails. - Note that a different error, PCRE2_ERROR_HEAPLIMIT, is given if the + Heap memory is used to remember backtracking points. This error is + given when the memory allocation function (default or custom) fails. + Note that a different error, PCRE2_ERROR_HEAPLIMIT, is given if the amount of memory needed exceeds the heap limit. PCRE2_ERROR_NOMEMORY is - also returned if PCRE2_COPY_MATCHED_SUBJECT is set and memory alloca- + also returned if PCRE2_COPY_MATCHED_SUBJECT is set and memory alloca- tion fails. PCRE2_ERROR_NULL @@ -3373,12 +3383,12 @@ ERROR RETURNS FROM pcre2_match() PCRE2_ERROR_RECURSELOOP - This error is returned when pcre2_match() detects a recursion loop - within the pattern. Specifically, it means that either the whole pat- + This error is returned when pcre2_match() detects a recursion loop + within the pattern. Specifically, it means that either the whole pat- tern or a capture group has been called recursively for the second time - at the same position in the subject string. Some simple patterns that - might do this are detected and faulted at compile time, but more com- - plicated cases, in particular mutual recursions between two different + at the same position in the subject string. Some simple patterns that + might do this are detected and faulted at compile time, but more com- + plicated cases, in particular mutual recursions between two different groups, cannot be detected until matching is attempted. @@ -3387,18 +3397,18 @@ OBTAINING A TEXTUAL ERROR MESSAGE int pcre2_get_error_message(int errorcode, PCRE2_UCHAR *buffer, PCRE2_SIZE bufflen); - A text message for an error code from any PCRE2 function (compile, - match, or auxiliary) can be obtained by calling pcre2_get_error_mes- - sage(). The code is passed as the first argument, with the remaining - two arguments specifying a code unit buffer and its length in code - units, into which the text message is placed. The message is returned - in code units of the appropriate width for the library that is being + A text message for an error code from any PCRE2 function (compile, + match, or auxiliary) can be obtained by calling pcre2_get_error_mes- + sage(). The code is passed as the first argument, with the remaining + two arguments specifying a code unit buffer and its length in code + units, into which the text message is placed. The message is returned + in code units of the appropriate width for the library that is being used. - The returned message is terminated with a trailing zero, and the func- - tion returns the number of code units used, excluding the trailing + The returned message is terminated with a trailing zero, and the func- + tion returns the number of code units used, excluding the trailing zero. If the error number is unknown, the negative error code PCRE2_ER- - ROR_BADDATA is returned. If the buffer is too small, the message is + ROR_BADDATA is returned. If the buffer is too small, the message is truncated (but still with a trailing zero), and the negative error code PCRE2_ERROR_NOMEMORY is returned. None of the messages is very long; a buffer size of 120 code units is ample. @@ -3410,28 +3420,28 @@ ITERATING OVER ALL MATCHES PCRE2_SIZE *pstart_offset, uint32_t *poptions); A common task for applications is to implement "global" matching behav- - iour, for example, replacing all matches in the subject; splitting the - subject on all matches; or simply counting the number of matches. The - pcre2_next_match() function helps with this task by providing the ap- - propriate parameters for the next match attempt (available since PCRE2 - 10.46). - - First, a match attempt should be made using one of the matching func- - tions (pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()). Then, + iour, for example, replacing all matches in the subject; splitting the + subject on all matches; or simply counting the number of matches. The + pcre2_next_match() function helps with this task by providing the ap- + propriate parameters for the next match attempt (available since PCRE2 + 10.47). + + First, a match attempt should be made using one of the matching func- + tions (pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()). Then, pcre2_next_match() can be called, providing the same match_data parame- ter. - It returns 0 ("false") if there is no need to make a further match at- - tempt, or 1 ("true") if another match should be attempted. Returning 1 - does not imply that there is another match, only that another match + It returns 0 ("false") if there is no need to make a further match at- + tempt, or 1 ("true") if another match should be attempted. Returning 1 + does not imply that there is another match, only that another match should be attempted (which may return PCRE2_ERROR_NOMATCH). - The *pstart_offset and *poptions are set if the function returns 1. + The *pstart_offset and *poptions are set if the function returns 1. The *pstart_offset should be passed to the next match attempt directly, and the *poptions should be passed to the next match attempt by combin- ing with the application's match options using OR. - There is some code that demonstrates how to do this in the pcre2demo + There is some code that demonstrates how to do this in the pcre2demo sample program. The general pattern is: uint32_t app_options = ...; @@ -3453,18 +3463,18 @@ ITERATING OVER ALL MATCHES } The guarantees provided by pcre2_next_match() are that the start_offset - will advance, so the loop will definitely terminate. The conditions - which ensure this are that either: (a) pcre2_next_match() returns 0 - (false); or (b) the returned *pstart_offset is strictly greater than - the previous start_offset; or (c) if the previous match was a success- + will advance, so the loop will definitely terminate. The conditions + which ensure this are that either: (a) pcre2_next_match() returns 0 + (false); or (b) the returned *pstart_offset is strictly greater than + the previous start_offset; or (c) if the previous match was a success- ful match of the empty string then the returned *pstart_offset is equal - to the previous ovector[1], and *poptions will be set to - PCRE2_NOTEMPTY_ATSTART to prevent another empty match from being re- + to the previous ovector[1], and *poptions will be set to + PCRE2_NOTEMPTY_ATSTART to prevent another empty match from being re- turned. - A loop implemented as shown above will always terminate, unless there - is a bug in PCRE2. As a measure of "defensive programming", applica- - tions are encouraged to add an assertion or check to break their loop + A loop implemented as shown above will always terminate, unless there + is a bug in PCRE2. As a measure of "defensive programming", applica- + tions are encouraged to add an assertion or check to break their loop if it does not make progress (and report the issue as a bug). If an application does not use the flag PCRE2_EXTRA_AL- @@ -3472,19 +3482,19 @@ ITERATING OVER ALL MATCHES start_offset <= ovector[0] <= ovector[1]. - In this case, the matches found by pcre2_match() with + In this case, the matches found by pcre2_match() with pcre2_next_match() will be sorted, non-overlapping (possibly touching), and with no duplicates. - Otherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the guar- - antees are considerably weaker. We do not guarantee that the matches + Otherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the guar- + antees are considerably weaker. We do not guarantee that the matches will always advance: only that the start_offset will. The matches found - by pcre2_match() with pcre2_next_match() will be a finite sequence (as - pcre2_next_match() ensures that start_offset advances, so the search - will terminate). The matches can however be overlapping, can contain + by pcre2_match() with pcre2_next_match() will be a finite sequence (as + pcre2_next_match() ensures that start_offset advances, so the search + will terminate). The matches can however be overlapping, can contain duplicates, and (in truly pathological examples) may not even be sorted by ovector[0]. Additionally, each match itself can end before it starts - (ovector[1] < ovector[0]). We recommend that applications do not set + (ovector[1] < ovector[0]). We recommend that applications do not set PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK. @@ -3503,39 +3513,39 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER void pcre2_substring_free(PCRE2_UCHAR *buffer); - Captured substrings can be accessed directly by using the ovector as + Captured substrings can be accessed directly by using the ovector as described above. For convenience, auxiliary functions are provided for - extracting captured substrings as new, separate, zero-terminated + extracting captured substrings as new, separate, zero-terminated strings. A substring that contains a binary zero is correctly extracted - and has a further zero added on the end, but the result is not, of + and has a further zero added on the end, but the result is not, of course, a C string. The functions in this section identify substrings by number. The number zero refers to the entire matched substring, with higher numbers refer- - ring to substrings captured by parenthesized groups. After a partial - match, only substring zero is available. An attempt to extract any - other substring gives the error PCRE2_ERROR_PARTIAL. The next section + ring to substrings captured by parenthesized groups. After a partial + match, only substring zero is available. An attempt to extract any + other substring gives the error PCRE2_ERROR_PARTIAL. The next section describes similar functions for extracting captured substrings by name. - If a pattern uses the \K escape sequence within a positive lookahead + If a pattern uses the \K escape sequence within a positive lookahead assertion, the reported start of a successful match can be greater than - the end of the match. For example, if the pattern (?=ab\K) is matched - against "ab", the start and end offset values for the match are 2 and - 0. In this situation, calling these functions with a zero substring + the end of the match. For example, if the pattern (?=ab\K) is matched + against "ab", the start and end offset values for the match are 2 and + 0. In this situation, calling these functions with a zero substring number extracts a zero-length empty string. - You can find the length in code units of a captured substring without - extracting it by calling pcre2_substring_length_bynumber(). The first - argument is a pointer to the match data block, the second is the group - number, and the third is a pointer to a variable into which the length - is placed. If you just want to know whether or not the substring has + You can find the length in code units of a captured substring without + extracting it by calling pcre2_substring_length_bynumber(). The first + argument is a pointer to the match data block, the second is the group + number, and the third is a pointer to a variable into which the length + is placed. If you just want to know whether or not the substring has been captured, you can pass the third argument as NULL. - The pcre2_substring_copy_bynumber() function copies a captured sub- - string into a supplied buffer, whereas pcre2_substring_get_bynumber() - copies it into new memory, obtained using the same memory allocation - function that was used for the match data block. The first two argu- - ments of these functions are a pointer to the match data block and a + The pcre2_substring_copy_bynumber() function copies a captured sub- + string into a supplied buffer, whereas pcre2_substring_get_bynumber() + copies it into new memory, obtained using the same memory allocation + function that was used for the match data block. The first two argu- + ments of these functions are a pointer to the match data block and a capture group number. The final arguments of pcre2_substring_copy_bynumber() are a pointer to @@ -3544,25 +3554,25 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER for the extracted substring, excluding the terminating zero. For pcre2_substring_get_bynumber() the third and fourth arguments point - to variables that are updated with a pointer to the new memory and the - number of code units that comprise the substring, again excluding the - terminating zero. When the substring is no longer needed, the memory + to variables that are updated with a pointer to the new memory and the + number of code units that comprise the substring, again excluding the + terminating zero. When the substring is no longer needed, the memory should be freed by calling pcre2_substring_free(). - The return value from all these functions is zero for success, or a - negative error code. If the pattern match failed, the match failure - code is returned. If a substring number greater than zero is used af- - ter a partial match, PCRE2_ERROR_PARTIAL is returned. Other possible + The return value from all these functions is zero for success, or a + negative error code. If the pattern match failed, the match failure + code is returned. If a substring number greater than zero is used af- + ter a partial match, PCRE2_ERROR_PARTIAL is returned. Other possible error codes are: PCRE2_ERROR_NOMEMORY - The buffer was too small for pcre2_substring_copy_bynumber(), or the + The buffer was too small for pcre2_substring_copy_bynumber(), or the attempt to get memory failed for pcre2_substring_get_bynumber(). PCRE2_ERROR_NOSUBSTRING - There is no substring with that number in the pattern, that is, the + There is no substring with that number in the pattern, that is, the number is greater than the number of capturing parentheses. PCRE2_ERROR_UNAVAILABLE @@ -3573,8 +3583,8 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER PCRE2_ERROR_UNSET - The substring did not participate in the match. For example, if the - pattern is (abc)|(def) and the subject is "def", and the ovector con- + The substring did not participate in the match. For example, if the + pattern is (abc)|(def) and the subject is "def", and the ovector con- tains at least two capturing slots, substring number 1 is unset. @@ -3585,31 +3595,31 @@ EXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS void pcre2_substring_list_free(PCRE2_UCHAR **list); - The pcre2_substring_list_get() function extracts all available sub- - strings and builds a list of pointers to them. It also (optionally) - builds a second list that contains their lengths (in code units), ex- - cluding a terminating zero that is added to each of them. All this is + The pcre2_substring_list_get() function extracts all available sub- + strings and builds a list of pointers to them. It also (optionally) + builds a second list that contains their lengths (in code units), ex- + cluding a terminating zero that is added to each of them. All this is done in a single block of memory that is obtained using the same memory allocation function that was used to get the match data block. - This function must be called only after a successful match. If called + This function must be called only after a successful match. If called after a partial match, the error code PCRE2_ERROR_PARTIAL is returned. - The address of the memory block is returned via listptr, which is also + The address of the memory block is returned via listptr, which is also the start of the list of string pointers. The end of the list is marked - by a NULL pointer. The address of the list of lengths is returned via - lengthsptr. If your strings do not contain binary zeros and you do not + by a NULL pointer. The address of the list of lengths is returned via + lengthsptr. If your strings do not contain binary zeros and you do not therefore need the lengths, you may supply NULL as the lengthsptr argu- - ment to disable the creation of a list of lengths. The yield of the - function is zero if all went well, or PCRE2_ERROR_NOMEMORY if the mem- - ory block could not be obtained. When the list is no longer needed, it + ment to disable the creation of a list of lengths. The yield of the + function is zero if all went well, or PCRE2_ERROR_NOMEMORY if the mem- + ory block could not be obtained. When the list is no longer needed, it should be freed by calling pcre2_substring_list_free(). If this function encounters a substring that is unset, which can happen - when capture group number n+1 matches some part of the subject, but - group n has not been used at all, it returns an empty string. This can + when capture group number n+1 matches some part of the subject, but + group n has not been used at all, it returns an empty string. This can be distinguished from a genuine zero-length substring by inspecting the - appropriate offset in the ovector, which contain PCRE2_UNSET for unset + appropriate offset in the ovector, which contain PCRE2_UNSET for unset substrings, or by calling pcre2_substring_length_bynumber(). @@ -3629,7 +3639,7 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME void pcre2_substring_free(PCRE2_UCHAR *buffer); - To extract a substring by name, you first have to find associated num- + To extract a substring by name, you first have to find associated num- ber. For example, for this pattern: (a+)b(?\d+)... @@ -3637,32 +3647,32 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME the number of the capture group called "xxx" is 2. If the name is known to be unique (PCRE2_DUPNAMES was not set), you can find the number from the name by calling pcre2_substring_number_from_name(). The first argu- - ment is the compiled pattern, and the second is the name. The yield of - the function is the group number, PCRE2_ERROR_NOSUBSTRING if there is - no group with that name, or PCRE2_ERROR_NOUNIQUESUBSTRING if there is - more than one group with that name. Given the number, you can extract - the substring directly from the ovector, or use one of the "bynumber" + ment is the compiled pattern, and the second is the name. The yield of + the function is the group number, PCRE2_ERROR_NOSUBSTRING if there is + no group with that name, or PCRE2_ERROR_NOUNIQUESUBSTRING if there is + more than one group with that name. Given the number, you can extract + the substring directly from the ovector, or use one of the "bynumber" functions described above. - For convenience, there are also "byname" functions that correspond to + For convenience, there are also "byname" functions that correspond to the "bynumber" functions, the only difference being that the second ar- - gument is a name instead of a number. If PCRE2_DUPNAMES is set and + gument is a name instead of a number. If PCRE2_DUPNAMES is set and there are duplicate names, these functions scan all the groups with the - given name, and return the captured substring from the first named + given name, and return the captured substring from the first named group that is set. - If there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING is - returned. If all groups with the name have numbers that are greater + If there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING is + returned. If all groups with the name have numbers that are greater than the number of slots in the ovector, PCRE2_ERROR_UNAVAILABLE is re- - turned. If there is at least one group with a slot in the ovector, but + turned. If there is at least one group with a slot in the ovector, but no group is found to be set, PCRE2_ERROR_UNSET is returned. Warning: If the pattern uses the (?| feature to set up multiple capture - groups with the same number, as described in the section on duplicate + groups with the same number, as described in the section on duplicate group numbers in the pcre2pattern page, you cannot use names to distin- - guish the different capture groups, because names are not included in - the compiled code. The matching process uses only numbers. For this - reason, the use of different names for groups with the same number + guish the different capture groups, because names are not included in + the compiled code. The matching process uses only numbers. For this + reason, the use of different names for groups with the same number causes an error at compile time. @@ -3675,100 +3685,108 @@ CREATING A NEW STRING WITH SUBSTITUTIONS PCRE2_SIZE rlength, PCRE2_UCHAR *outputbuffer, PCRE2_SIZE *outlengthptr); - This function optionally calls pcre2_match() and then makes a copy of - the subject string in outputbuffer, replacing parts that were matched + This function optionally calls pcre2_match() and then makes a copy of + the subject string in outputbuffer, replacing parts that were matched with the replacement string, whose length is supplied in rlength, which - can be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As - a special case, if replacement is NULL and rlength is zero, the re- - placement is assumed to be an empty string. If rlength is non-zero, an + can be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As + a special case, if replacement is NULL and rlength is zero, the re- + placement is assumed to be an empty string. If rlength is non-zero, an error occurs if replacement is NULL. There is an option (see PCRE2_SUBSTITUTE_REPLACEMENT_ONLY below) to re- - turn just the replacement string(s). The default action is to perform - just one replacement if the pattern matches, but there is an option - that requests multiple replacements (see PCRE2_SUBSTITUTE_GLOBAL be- + turn just the replacement string(s). The default action is to perform + just one replacement if the pattern matches, but there is an option + that requests multiple replacements (see PCRE2_SUBSTITUTE_GLOBAL be- low). - If successful, pcre2_substitute() returns the number of substitutions - that were carried out. This may be zero if no match was found, and is - never greater than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A nega- + If successful, pcre2_substitute() returns the number of substitutions + that were carried out. This may be zero if no match was found, and is + never greater than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A nega- tive value is returned if an error is detected. - Matches in which a \K item in a lookahead in the pattern causes the - match to end before it starts are not supported, and give rise to an + Matches in which a \K item in a lookahead in the pattern causes the + match to end before it starts are not supported, and give rise to an error return. For global replacements, matches in which \K in a lookbe- - hind causes the match to start earlier than the point that was reached + hind causes the match to start earlier than the point that was reached in the previous iteration are also not supported. (These cases are only - possible if the pattern was compiled with the backwards-compatibility + possible if the pattern was compiled with the backwards-compatibility option PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.) - The first seven arguments of pcre2_substitute() are the same as for + The first seven arguments of pcre2_substitute() are the same as for pcre2_match(), except that the partial matching options are not permit- - ted, and match_data may be passed as NULL, in which case a match data - block is obtained and freed within this function, using memory manage- - ment functions from the match context, if provided, or else those that + ted, and match_data may be passed as NULL, in which case a match data + block is obtained and freed within this function, using memory manage- + ment functions from the match context, if provided, or else those that were used to allocate memory for the compiled code. - If match_data is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set, the + If match_data is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set, the provided block is used for all calls to pcre2_match(), and its contents - afterwards are the result of the final call made internally by - pcre2_substitute() to the matching function. For global changes, this + afterwards are the result of the final call made internally by + pcre2_substitute() to the matching function. For global changes, this will always be a no-match error. The contents of the ovector within the match data block may or may not have been changed. - As well as the usual options for pcre2_match(), a number of additional - options can be set in the options argument of pcre2_substitute(). One - such option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external - match_data block must be provided, and it must have already been used - for an external call to pcre2_match() (or pcre2_jit_match()) with the - same pattern, subject pointer, effective subject length, start offset, + As well as the usual options for pcre2_match(), a number of additional + options can be set in the options argument of pcre2_substitute(). One + such option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external + match_data block must be provided, and it must have already been used + for an external call to pcre2_match() (or pcre2_jit_match()) with the + same pattern, subject pointer, effective subject length, start offset, and match option arguments (substitute-specific options can be added to - the options argument). If any of these parameters is changed, - pcre2_substitute() returns an error. The data in the match_data block + the options argument). If any of these parameters is changed, + pcre2_substitute() returns an error. The data in the match_data block (return code, offset vector) is used for the first substitution instead of calling pcre2_match() from within pcre2_substitute(). This allows an application to check for a match before choosing to substitute, without having to repeat the match. - If the contents of the subject buffer are mutated in between - pcre2_match() and a call to pcre2_substitute() with PCRE2_SUBSTI- - TUTE_MATCHED, the behaviour is unsafe; in particular, in this case, - PCRE2 is unable to ensure that the offsets in the ovector point to the + If the contents of the subject buffer are mutated in between + pcre2_match() and a call to pcre2_substitute() with PCRE2_SUBSTI- + TUTE_MATCHED, the behaviour is unsafe; in particular, in this case, + PCRE2 is unable to ensure that the offsets in the ovector point to the start of characters (with UTF-encoded input). - The contents of the externally supplied match data block are not + The contents of the externally supplied match data block are not changed when PCRE2_SUBSTITUTE_MATCHED is set, and so the match block is - permitted for use in another call using PCRE2_SUBSTITUTE_MATCHED. If - PCRE2_SUBSTITUTE_GLOBAL is also set, pcre2_match() is called after the - first substitution to check for furthe matches, but this is done using + permitted for use in another call using PCRE2_SUBSTITUTE_MATCHED. If + PCRE2_SUBSTITUTE_GLOBAL is also set, pcre2_match() is called after the + first substitution to check for furthe matches, but this is done using an internally obtained match data block, thus always leaving the exter- nal block unchanged. - The code argument is not used for matching before the first substitu- - tion when PCRE2_SUBSTITUTE_MATCHED is set, but it must be provided, - even when PCRE2_SUBSTITUTE_GLOBAL is not set, because it contains in- + The code argument is not used for matching before the first substitu- + tion when PCRE2_SUBSTITUTE_MATCHED is set, but it must be provided, + even when PCRE2_SUBSTITUTE_GLOBAL is not set, because it contains in- formation such as the UTF setting and the number of capturing parenthe- ses in the pattern. - When using PCRE2_SUBSTITUTE_MATCHED, you should not modify the subject - string in between the prior call to pcre2_match() and pcre2_substi- - tute(), as the substitution assumes that the passed-in ovector is com- - patible with the subject string. Although PCRE2 does verify that the - subject is a pointer to the same buffer, it cannot in general verify - whether the contents of the buffer have changed. For example, if the - subject buffer is mutated from one valid UTF-8 string to another valid - string, of the same length in code units, the ovector offsets are no - longer guaranteed to point to the start of a character. Beware that - with PCRE2_SUBSTITUTE_MATCHED in UTF mode, the subject string is not + When using PCRE2_SUBSTITUTE_MATCHED, you should not modify the subject + string in between the prior call to pcre2_match() and pcre2_substi- + tute(), as the substitution assumes that the passed-in ovector is com- + patible with the subject string. Although PCRE2 does verify that the + subject is a pointer to the same buffer, it cannot in general verify + whether the contents of the buffer have changed. For example, if the + subject buffer is mutated from one valid UTF-8 string to another valid + string, of the same length in code units, the ovector offsets are no + longer guaranteed to point to the start of a character. Beware that + with PCRE2_SUBSTITUTE_MATCHED in UTF mode, the subject string is not re-scanned for UTF validity when pcre2_substitute() first uses it. - The default action of pcre2_substitute() is to return a copy of the + The default action of pcre2_substitute() is to return a copy of the subject string with matched substrings replaced. However, if PCRE2_SUB- - STITUTE_REPLACEMENT_ONLY is set, only the replacement substrings are + STITUTE_REPLACEMENT_ONLY is set, only the replacement substrings are returned. In the global case, multiple replacements are concatenated in - the output buffer. Substitution callouts (see below) can be used to + the output buffer. Substitution callouts (see below) can be used to separate them if necessary. + Partial matching is supported, with limitations: if matching succeeds + but with a partial match, then pcre2_substitute returns PCRE2_ER- + ROR_PARTIAL. When partial-matching (either of PCRE2_PARTIAL_HARD or + PCRE2_PARTIAL_SOFT is passed), then PCRE2_SUBSTITUTE_REPLACEMENT_ONLY + must also be set, or else PCRE2_ERROR_BADOPTION is returned. Similarly, + certain replacement items ($' and $_) cause PCRE2_ERROR_PARTIALSUBS to + be returned when partial-matching, even if a complete match is found. + The outlengthptr argument of pcre2_substitute() must point to a vari- able that contains the length, in code units, of the output buffer. If the function is successful, the value is updated to contain the length @@ -4418,11 +4436,11 @@ AUTHOR REVISION - Last updated: 19 October 2025 + Last updated: 08 December 2025 Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 19 October 2025 PCRE2API(3) +PCRE2 10.48-RC1 08 December 2025 PCRE2API(3) ------------------------------------------------------------------------------ @@ -5069,7 +5087,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 17 October 2025 PCRE2BUILD(3) +PCRE2 10.48-RC1 17 October 2025 PCRE2BUILD(3) ------------------------------------------------------------------------------ @@ -5502,7 +5520,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 26 February 2025 PCRE2CALLOUT(3) +PCRE2 10.48-RC1 26 February 2025 PCRE2CALLOUT(3) ------------------------------------------------------------------------------ @@ -5761,7 +5779,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 02 June 2025 PCRE2COMPAT(3) +PCRE2 10.48-RC1 02 June 2025 PCRE2COMPAT(3) ------------------------------------------------------------------------------ @@ -6176,11 +6194,11 @@ JIT FAST PATH API The fast path function is called pcre2_jit_match(), and it takes ex- actly the same arguments as pcre2_match(). However, the subject string must be specified with a length; PCRE2_ZERO_TERMINATED is not sup- - ported. Unsupported option bits (for example, PCRE2_ANCHORED and - PCRE2_ENDANCHORED) are ignored, as is the PCRE2_NO_JIT option. The re- - turn values are also the same as for pcre2_match(), plus PCRE2_ER- - ROR_JIT_BADOPTION if a matching mode (partial or complete) is requested - that was not compiled. + ported. Unsupported option bits (for example, PCRE2_ANCHORED, PCRE2_EN- + DANCHORED, and PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the + PCRE2_NO_JIT option. The return values are also the same as for + pcre2_match(), plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (par- + tial or complete) is requested that was not compiled. When you call pcre2_match(), as well as testing for invalid options, a number of other sanity checks are performed on the arguments. For exam- @@ -6212,11 +6230,11 @@ AUTHOR REVISION - Last updated: 22 August 2024 + Last updated: 08 August 2026 Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 22 August 2024 PCRE2JIT(3) +PCRE2 10.48-RC1 08 August 2026 PCRE2JIT(3) ------------------------------------------------------------------------------ @@ -6301,7 +6319,7 @@ REVISION Copyright (c) 1997-2023 University of Cambridge. -PCRE2 10.47 03 September 2025 PCRE2LIMITS(3) +PCRE2 10.48-RC1 03 September 2025 PCRE2LIMITS(3) ------------------------------------------------------------------------------ @@ -6534,7 +6552,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 22 February 2025 PCRE2MATCHING(3) +PCRE2 10.48-RC1 22 February 2025 PCRE2MATCHING(3) ------------------------------------------------------------------------------ @@ -6903,6 +6921,20 @@ MULTI-SEGMENT MATCHING WITH pcre2_dfa_match() on the second buffer, you can then try a new match starting at offset n+1 in the first buffer. + Therefore, PCRE2_DFA_RESTART does not remove the need to keep earlier + subject data. In order to perform a bumpalong and continue matching at + the next character, all subject data from the current match start must + be retained, together with enough preceding data to satisfy the re- + quirements of lookbehind assertions (remembering as above that + PCRE2_INFO_MAXLOOKBEHIND only describes the buffer requirement of a + single lookbehind, and nested lookbehinds can read back further from + the match start). This makes streaming match processing using + PCRE2_DFA_RESTART challenging, and the application cannot easily set a + bound on the number of chunks to buffer. For multi-segment searching + that is intended to produce the same result as searching the whole sub- + ject, it is usually simpler to avoid PCRE2_DFA_RESTART and run a fresh + match, using either matching function, over the retained text. + AUTHOR @@ -6913,11 +6945,11 @@ AUTHOR REVISION - Last updated: 27 November 2024 + Last updated: 16 August 2026 Copyright (c) 1997-2019 University of Cambridge. -PCRE2 10.47 27 November 2024 PCRE2PARTIAL(3) +PCRE2 10.48-RC1 16 August 2026 PCRE2PARTIAL(3) ------------------------------------------------------------------------------ @@ -10105,7 +10137,7 @@ RECURSIVE PATTERNS Recursion and subroutines with returned capture groups - Since PCRE2 10.46, recursion and subroutine calls may also specify a + Since PCRE2 10.47, recursion and subroutine calls may also specify a list of capture groups to return. This is a PCRE2 syntax extension not supported by Perl. The pattern matching recurses into the referenced expression as described above, however, when the recursion returns to @@ -10782,11 +10814,11 @@ AUTHOR REVISION - Last updated: 03 September 2025 + Last updated: 25 October 2025 Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 03 September 2025 PCRE2PATTERN(3) +PCRE2 10.48-RC1 25 October 2025 PCRE2PATTERN(3) ------------------------------------------------------------------------------ @@ -11041,7 +11073,7 @@ REVISION Copyright (c) 1997-2022 University of Cambridge. -PCRE2 10.47 06 December 2022 PCRE2PERFORM(3) +PCRE2 10.48-RC1 06 December 2022 PCRE2PERFORM(3) ------------------------------------------------------------------------------ @@ -11399,7 +11431,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 27 November 2024 PCRE2POSIX(3) +PCRE2 10.48-RC1 27 November 2024 PCRE2POSIX(3) ------------------------------------------------------------------------------ @@ -11493,7 +11525,7 @@ REVISION Copyright (c) 1997-2016 University of Cambridge. -PCRE2 10.47 28 February 2025 PCRE2SAMPLE(3) +PCRE2 10.48-RC1 28 February 2025 PCRE2SAMPLE(3) ------------------------------------------------------------------------------ PCRE2SERIALIZE(3) Library Functions Manual PCRE2SERIALIZE(3) @@ -11684,7 +11716,7 @@ REVISION Copyright (c) 1997-2018 University of Cambridge. -PCRE2 10.47 19 January 2024 PCRE2SERIALIZE(3) +PCRE2 10.48-RC1 19 January 2024 PCRE2SERIALIZE(3) ------------------------------------------------------------------------------ @@ -12416,7 +12448,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 14 October 2025 PCRE2SYNTAX(3) +PCRE2 10.48-RC1 14 October 2025 PCRE2SYNTAX(3) ------------------------------------------------------------------------------ @@ -12911,7 +12943,7 @@ REVISION Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 27 November 2024 PCRE2UNICODE(3) +PCRE2 10.48-RC1 27 November 2024 PCRE2UNICODE(3) ------------------------------------------------------------------------------ diff --git a/doc/pcre2_callout_enumerate.3 b/doc/pcre2_callout_enumerate.3 index 9065fd8..32bfa33 100644 --- a/doc/pcre2_callout_enumerate.3 +++ b/doc/pcre2_callout_enumerate.3 @@ -1,4 +1,4 @@ -.TH PCRE2_COMPILE 3 "23 March 2017" "PCRE2 10.47" +.TH PCRE2_COMPILE 3 "23 March 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_code_copy.3 b/doc/pcre2_code_copy.3 index 9b6526f..c5038ab 100644 --- a/doc/pcre2_code_copy.3 +++ b/doc/pcre2_code_copy.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CODE_COPY 3 "22 November 2016" "PCRE2 10.47" +.TH PCRE2_CODE_COPY 3 "22 November 2016" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_code_copy_with_tables.3 b/doc/pcre2_code_copy_with_tables.3 index 3896577..4252e6d 100644 --- a/doc/pcre2_code_copy_with_tables.3 +++ b/doc/pcre2_code_copy_with_tables.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CODE_COPY 3 "16 January 2017" "PCRE2 10.47" +.TH PCRE2_CODE_COPY 3 "16 January 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_code_free.3 b/doc/pcre2_code_free.3 index ca660e8..a538b1e 100644 --- a/doc/pcre2_code_free.3 +++ b/doc/pcre2_code_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CODE_FREE 3 "28 June 2018" "PCRE2 10.47" +.TH PCRE2_CODE_FREE 3 "28 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_compile.3 b/doc/pcre2_compile.3 index eb40814..ec3bb9a 100644 --- a/doc/pcre2_compile.3 +++ b/doc/pcre2_compile.3 @@ -1,4 +1,4 @@ -.TH PCRE2_COMPILE 3 "30 October 2024" "PCRE2 10.47" +.TH PCRE2_COMPILE 3 "30 October 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_compile_context_copy.3 b/doc/pcre2_compile_context_copy.3 index c3353b5..15a85fb 100644 --- a/doc/pcre2_compile_context_copy.3 +++ b/doc/pcre2_compile_context_copy.3 @@ -1,4 +1,4 @@ -.TH PCRE2_COMPILE_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_COMPILE_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_compile_context_create.3 b/doc/pcre2_compile_context_create.3 index f094977..87f7b52 100644 --- a/doc/pcre2_compile_context_create.3 +++ b/doc/pcre2_compile_context_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_COMPILE_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_COMPILE_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_compile_context_free.3 b/doc/pcre2_compile_context_free.3 index ded964e..d51fc9d 100644 --- a/doc/pcre2_compile_context_free.3 +++ b/doc/pcre2_compile_context_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_COMPILE_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47" +.TH PCRE2_COMPILE_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_config.3 b/doc/pcre2_config.3 index e109180..785bd00 100644 --- a/doc/pcre2_config.3 +++ b/doc/pcre2_config.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CONFIG 3 "03 September 2025" "PCRE2 10.47" +.TH PCRE2_CONFIG 3 "03 September 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_convert_context_copy.3 b/doc/pcre2_convert_context_copy.3 index 32073f0..2c9e78b 100644 --- a/doc/pcre2_convert_context_copy.3 +++ b/doc/pcre2_convert_context_copy.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CONVERT_CONTEXT_COPY 3 "12 July 2017" "PCRE2 10.47" +.TH PCRE2_CONVERT_CONTEXT_COPY 3 "12 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_convert_context_create.3 b/doc/pcre2_convert_context_create.3 index 6a5c9be..7a55894 100644 --- a/doc/pcre2_convert_context_create.3 +++ b/doc/pcre2_convert_context_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CONVERT_CONTEXT_CREATE 3 "12 July 2017" "PCRE2 10.47" +.TH PCRE2_CONVERT_CONTEXT_CREATE 3 "12 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_convert_context_free.3 b/doc/pcre2_convert_context_free.3 index 7fbda34..874982b 100644 --- a/doc/pcre2_convert_context_free.3 +++ b/doc/pcre2_convert_context_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CONVERT_CONTEXT_FREE 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_CONVERT_CONTEXT_FREE 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_converted_pattern_free.3 b/doc/pcre2_converted_pattern_free.3 index 3b09fe7..b195236 100644 --- a/doc/pcre2_converted_pattern_free.3 +++ b/doc/pcre2_converted_pattern_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_CONVERTED_PATTERN_FREE 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_CONVERTED_PATTERN_FREE 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_dfa_match.3 b/doc/pcre2_dfa_match.3 index 4a4673b..f6ee613 100644 --- a/doc/pcre2_dfa_match.3 +++ b/doc/pcre2_dfa_match.3 @@ -1,4 +1,4 @@ -.TH PCRE2_DFA_MATCH 3 "31 August 2021" "PCRE2 10.47" +.TH PCRE2_DFA_MATCH 3 "31 August 2021" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_general_context_copy.3 b/doc/pcre2_general_context_copy.3 index 1f73772..0de6743 100644 --- a/doc/pcre2_general_context_copy.3 +++ b/doc/pcre2_general_context_copy.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GENERAL_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_GENERAL_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_general_context_create.3 b/doc/pcre2_general_context_create.3 index cd9e1b5..d35dfa2 100644 --- a/doc/pcre2_general_context_create.3 +++ b/doc/pcre2_general_context_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GENERAL_CONTEXT_CREATE 3 "23 January 2023" "PCRE2 10.47" +.TH PCRE2_GENERAL_CONTEXT_CREATE 3 "23 January 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_general_context_free.3 b/doc/pcre2_general_context_free.3 index 3d69d13..b056780 100644 --- a/doc/pcre2_general_context_free.3 +++ b/doc/pcre2_general_context_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GENERAL_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47" +.TH PCRE2_GENERAL_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_error_message.3 b/doc/pcre2_get_error_message.3 index cffc573..d7b6657 100644 --- a/doc/pcre2_get_error_message.3 +++ b/doc/pcre2_get_error_message.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_ERROR_MESSAGE 3 "24 March 2017" "PCRE2 10.47" +.TH PCRE2_GET_ERROR_MESSAGE 3 "24 March 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_mark.3 b/doc/pcre2_get_mark.3 index 6d29106..4ead97a 100644 --- a/doc/pcre2_get_mark.3 +++ b/doc/pcre2_get_mark.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_MARK 3 "13 January 2018" "PCRE2 10.47" +.TH PCRE2_GET_MARK 3 "13 January 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_match_data_heapframes_size.3 b/doc/pcre2_get_match_data_heapframes_size.3 index 555bcd2..b10e663 100644 --- a/doc/pcre2_get_match_data_heapframes_size.3 +++ b/doc/pcre2_get_match_data_heapframes_size.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_MATCH_DATA_HEAPFRAMES_SIZE 3 "18 January 2023" "PCRE2 10.47" +.TH PCRE2_GET_MATCH_DATA_HEAPFRAMES_SIZE 3 "18 January 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_match_data_size.3 b/doc/pcre2_get_match_data_size.3 index 3ebc4fd..e7940b5 100644 --- a/doc/pcre2_get_match_data_size.3 +++ b/doc/pcre2_get_match_data_size.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_MATCH_DATA_SIZE 3 "17 October 2019" "PCRE2 10.47" +.TH PCRE2_GET_MATCH_DATA_SIZE 3 "17 October 2019" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_ovector_count.3 b/doc/pcre2_get_ovector_count.3 index 23f072d..b6ef0e6 100644 --- a/doc/pcre2_get_ovector_count.3 +++ b/doc/pcre2_get_ovector_count.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_OVECTOR_COUNT 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_GET_OVECTOR_COUNT 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_ovector_pointer.3 b/doc/pcre2_get_ovector_pointer.3 index 7d9ec1e..5a0d168 100644 --- a/doc/pcre2_get_ovector_pointer.3 +++ b/doc/pcre2_get_ovector_pointer.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_OVECTOR_POINTER 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_GET_OVECTOR_POINTER 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_get_startchar.3 b/doc/pcre2_get_startchar.3 index b9c4f7b..bd1bf16 100644 --- a/doc/pcre2_get_startchar.3 +++ b/doc/pcre2_get_startchar.3 @@ -1,4 +1,4 @@ -.TH PCRE2_GET_STARTCHAR 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_GET_STARTCHAR 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_compile.3 b/doc/pcre2_jit_compile.3 index 9961d47..410e2d2 100644 --- a/doc/pcre2_jit_compile.3 +++ b/doc/pcre2_jit_compile.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_COMPILE 3 "22 August 2024" "PCRE2 10.47" +.TH PCRE2_JIT_COMPILE 3 "22 August 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_free_unused_memory.3 b/doc/pcre2_jit_free_unused_memory.3 index fa1073a..ec7ea36 100644 --- a/doc/pcre2_jit_free_unused_memory.3 +++ b/doc/pcre2_jit_free_unused_memory.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_FREE_UNUSED_MEMORY 3 "24 April 2020" "PCRE2 10.47" +.TH PCRE2_JIT_FREE_UNUSED_MEMORY 3 "24 April 2020" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_match.3 b/doc/pcre2_jit_match.3 index e147b90..e82c129 100644 --- a/doc/pcre2_jit_match.3 +++ b/doc/pcre2_jit_match.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_MATCH 3 "20 January 2023" "PCRE2 10.47" +.TH PCRE2_JIT_MATCH 3 "20 January 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_stack_assign.3 b/doc/pcre2_jit_stack_assign.3 index 61fc963..763c8b5 100644 --- a/doc/pcre2_jit_stack_assign.3 +++ b/doc/pcre2_jit_stack_assign.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_STACK_ASSIGN 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_JIT_STACK_ASSIGN 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_stack_create.3 b/doc/pcre2_jit_stack_create.3 index 494eee8..055bb9d 100644 --- a/doc/pcre2_jit_stack_create.3 +++ b/doc/pcre2_jit_stack_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_STACK_CREATE 3 "23 January 2023" "PCRE2 10.47" +.TH PCRE2_JIT_STACK_CREATE 3 "23 January 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_jit_stack_free.3 b/doc/pcre2_jit_stack_free.3 index 0b88759..d8fb298 100644 --- a/doc/pcre2_jit_stack_free.3 +++ b/doc/pcre2_jit_stack_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_JIT_STACK_FREE 3 "26 February 2025" "PCRE2 10.47" +.TH PCRE2_JIT_STACK_FREE 3 "26 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_maketables.3 b/doc/pcre2_maketables.3 index b42933f..1191842 100644 --- a/doc/pcre2_maketables.3 +++ b/doc/pcre2_maketables.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MAKETABLES 3 "26 February 2025" "PCRE2 10.47" +.TH PCRE2_MAKETABLES 3 "26 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_maketables_free.3 b/doc/pcre2_maketables_free.3 index 4b835c3..819a6b6 100644 --- a/doc/pcre2_maketables_free.3 +++ b/doc/pcre2_maketables_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MAKETABLES_FREE 3 "03 September 2019" "PCRE2 10.47" +.TH PCRE2_MAKETABLES_FREE 3 "03 September 2019" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match.3 b/doc/pcre2_match.3 index 5701b75..69c31f1 100644 --- a/doc/pcre2_match.3 +++ b/doc/pcre2_match.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH 3 "27 January 2024" "PCRE2 10.47" +.TH PCRE2_MATCH 3 "27 January 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_context_copy.3 b/doc/pcre2_match_context_copy.3 index cbce67a..d35153f 100644 --- a/doc/pcre2_match_context_copy.3 +++ b/doc/pcre2_match_context_copy.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_MATCH_CONTEXT_COPY 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_context_create.3 b/doc/pcre2_match_context_create.3 index ab624a3..e616453 100644 --- a/doc/pcre2_match_context_create.3 +++ b/doc/pcre2_match_context_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_MATCH_CONTEXT_CREATE 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_context_free.3 b/doc/pcre2_match_context_free.3 index e0a4d62..93844b0 100644 --- a/doc/pcre2_match_context_free.3 +++ b/doc/pcre2_match_context_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.47" +.TH PCRE2_MATCH_CONTEXT_FREE 3 "28 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_data_create.3 b/doc/pcre2_match_data_create.3 index 49ee289..ca8aad6 100644 --- a/doc/pcre2_match_data_create.3 +++ b/doc/pcre2_match_data_create.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_DATA_CREATE 3 "28 August 2021" "PCRE2 10.47" +.TH PCRE2_MATCH_DATA_CREATE 3 "28 August 2021" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_data_create_from_pattern.3 b/doc/pcre2_match_data_create_from_pattern.3 index d105b62..c9d9495 100644 --- a/doc/pcre2_match_data_create_from_pattern.3 +++ b/doc/pcre2_match_data_create_from_pattern.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_DATA_CREATE_FROM_PATTERN 3 "11 August 2025" "PCRE2 10.47" +.TH PCRE2_MATCH_DATA_CREATE_FROM_PATTERN 3 "11 August 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_match_data_free.3 b/doc/pcre2_match_data_free.3 index 245b3e2..9cf7f5c 100644 --- a/doc/pcre2_match_data_free.3 +++ b/doc/pcre2_match_data_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_MATCH_DATA_FREE 3 "16 August 2023" "PCRE2 10.47" +.TH PCRE2_MATCH_DATA_FREE 3 "16 August 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_next_match.3 b/doc/pcre2_next_match.3 index 4c8f4e9..b38eba3 100644 --- a/doc/pcre2_next_match.3 +++ b/doc/pcre2_next_match.3 @@ -1,4 +1,4 @@ -.TH PCRE2_NEXT_MATCH 3 "24 March 2025" "PCRE2 10.47" +.TH PCRE2_NEXT_MATCH 3 "24 March 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_pattern_convert.3 b/doc/pcre2_pattern_convert.3 index 4302c52..41f45e7 100644 --- a/doc/pcre2_pattern_convert.3 +++ b/doc/pcre2_pattern_convert.3 @@ -1,4 +1,4 @@ -.TH PCRE2_PATTERN_CONVERT 3 "12 July 2017" "PCRE2 10.47" +.TH PCRE2_PATTERN_CONVERT 3 "12 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_pattern_info.3 b/doc/pcre2_pattern_info.3 index aa8c662..c40328e 100644 --- a/doc/pcre2_pattern_info.3 +++ b/doc/pcre2_pattern_info.3 @@ -1,4 +1,4 @@ -.TH PCRE2_PATTERN_INFO 3 "14 February 2019" "PCRE2 10.47" +.TH PCRE2_PATTERN_INFO 3 "14 February 2019" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_serialize_decode.3 b/doc/pcre2_serialize_decode.3 index 363d73c..2a9e401 100644 --- a/doc/pcre2_serialize_decode.3 +++ b/doc/pcre2_serialize_decode.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SERIALIZE_DECODE 3 "22 April 2022" "PCRE2 10.47" +.TH PCRE2_SERIALIZE_DECODE 3 "22 April 2022" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_serialize_encode.3 b/doc/pcre2_serialize_encode.3 index ca0ff3b..0fff174 100644 --- a/doc/pcre2_serialize_encode.3 +++ b/doc/pcre2_serialize_encode.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SERIALIZE_ENCODE 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_SERIALIZE_ENCODE 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_serialize_free.3 b/doc/pcre2_serialize_free.3 index fc563de..ec1d68d 100644 --- a/doc/pcre2_serialize_free.3 +++ b/doc/pcre2_serialize_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SERIALIZE_FREE 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_SERIALIZE_FREE 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_serialize_get_number_of_codes.3 b/doc/pcre2_serialize_get_number_of_codes.3 index 9cb0fbb..35329e9 100644 --- a/doc/pcre2_serialize_get_number_of_codes.3 +++ b/doc/pcre2_serialize_get_number_of_codes.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SERIALIZE_GET_NUMBER_OF_CODES 3 "13 August 2018" "PCRE2 10.47" +.TH PCRE2_SERIALIZE_GET_NUMBER_OF_CODES 3 "13 August 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_bsr.3 b/doc/pcre2_set_bsr.3 index a0d6014..71e7756 100644 --- a/doc/pcre2_set_bsr.3 +++ b/doc/pcre2_set_bsr.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_BSR 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_SET_BSR 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_callout.3 b/doc/pcre2_set_callout.3 index a71dd7e..4d2090d 100644 --- a/doc/pcre2_set_callout.3 +++ b/doc/pcre2_set_callout.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_CALLOUT 3 "25 March 2017" "PCRE2 10.47" +.TH PCRE2_SET_CALLOUT 3 "25 March 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_character_tables.3 b/doc/pcre2_set_character_tables.3 index e6d0503..4e17399 100644 --- a/doc/pcre2_set_character_tables.3 +++ b/doc/pcre2_set_character_tables.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_CHARACTER_TABLES 3 "15 April 2020" "PCRE2 10.47" +.TH PCRE2_SET_CHARACTER_TABLES 3 "15 April 2020" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_compile_extra_options.3 b/doc/pcre2_set_compile_extra_options.3 index 56e8e00..d1d414b 100644 --- a/doc/pcre2_set_compile_extra_options.3 +++ b/doc/pcre2_set_compile_extra_options.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_COMPILE_EXTRA_OPTIONS 3 "14 October 2024" "PCRE2 10.47" +.TH PCRE2_SET_COMPILE_EXTRA_OPTIONS 3 "14 October 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_compile_recursion_guard.3 b/doc/pcre2_set_compile_recursion_guard.3 index 44ed685..de03c25 100644 --- a/doc/pcre2_set_compile_recursion_guard.3 +++ b/doc/pcre2_set_compile_recursion_guard.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_COMPILE_RECURSION_GUARD 3 "26 November 2014" "PCRE2 10.47" +.TH PCRE2_SET_COMPILE_RECURSION_GUARD 3 "26 November 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_depth_limit.3 b/doc/pcre2_set_depth_limit.3 index a816a0c..7203f1c 100644 --- a/doc/pcre2_set_depth_limit.3 +++ b/doc/pcre2_set_depth_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_DEPTH_LIMIT 3 "25 March 2017" "PCRE2 10.47" +.TH PCRE2_SET_DEPTH_LIMIT 3 "25 March 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_glob_escape.3 b/doc/pcre2_set_glob_escape.3 index 89c2ee3..93cbcd4 100644 --- a/doc/pcre2_set_glob_escape.3 +++ b/doc/pcre2_set_glob_escape.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_GLOB_ESCAPE 3 "12 July 2017" "PCRE2 10.47" +.TH PCRE2_SET_GLOB_ESCAPE 3 "12 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_glob_separator.3 b/doc/pcre2_set_glob_separator.3 index 14e8e2f..bafbe88 100644 --- a/doc/pcre2_set_glob_separator.3 +++ b/doc/pcre2_set_glob_separator.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_GLOB_SEPARATOR 3 "17 June 2018" "PCRE2 10.47" +.TH PCRE2_SET_GLOB_SEPARATOR 3 "17 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_heap_limit.3 b/doc/pcre2_set_heap_limit.3 index 05a69f1..5cfc714 100644 --- a/doc/pcre2_set_heap_limit.3 +++ b/doc/pcre2_set_heap_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_HEAP_LIMIT 3 "17 June 2018" "PCRE2 10.47" +.TH PCRE2_SET_HEAP_LIMIT 3 "17 June 2018" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_match_limit.3 b/doc/pcre2_set_match_limit.3 index d5e34c1..5e809ad 100644 --- a/doc/pcre2_set_match_limit.3 +++ b/doc/pcre2_set_match_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_MATCH_LIMIT 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_SET_MATCH_LIMIT 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_max_pattern_compiled_length.3 b/doc/pcre2_set_max_pattern_compiled_length.3 index bfb7fe0..d931821 100644 --- a/doc/pcre2_set_max_pattern_compiled_length.3 +++ b/doc/pcre2_set_max_pattern_compiled_length.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "09 June 2024" "PCRE2 10.47" +.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "09 June 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_max_pattern_length.3 b/doc/pcre2_set_max_pattern_length.3 index 7d5aa85..be5b388 100644 --- a/doc/pcre2_set_max_pattern_length.3 +++ b/doc/pcre2_set_max_pattern_length.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_MAX_PATTERN_LENGTH 3 "05 October 2016" "PCRE2 10.47" +.TH PCRE2_SET_MAX_PATTERN_LENGTH 3 "05 October 2016" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_max_varlookbehind.3 b/doc/pcre2_set_max_varlookbehind.3 index 95bb273..98d9f91 100644 --- a/doc/pcre2_set_max_varlookbehind.3 +++ b/doc/pcre2_set_max_varlookbehind.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_NEWLINE 3 "11 August 2023" "PCRE2 10.47" +.TH PCRE2_SET_NEWLINE 3 "11 August 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_newline.3 b/doc/pcre2_set_newline.3 index 40aae44..f227138 100644 --- a/doc/pcre2_set_newline.3 +++ b/doc/pcre2_set_newline.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_NEWLINE 3 "19 July 2017" "PCRE2 10.47" +.TH PCRE2_SET_NEWLINE 3 "19 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_offset_limit.3 b/doc/pcre2_set_offset_limit.3 index 031b376..19476c0 100644 --- a/doc/pcre2_set_offset_limit.3 +++ b/doc/pcre2_set_offset_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_OFFSET_LIMIT 3 "22 September 2015" "PCRE2 10.47" +.TH PCRE2_SET_OFFSET_LIMIT 3 "22 September 2015" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_optimize.3 b/doc/pcre2_set_optimize.3 index 499cd62..12ae23a 100644 --- a/doc/pcre2_set_optimize.3 +++ b/doc/pcre2_set_optimize.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_OPTIMIZE 3 "22 September 2024" "PCRE2 10.47" +.TH PCRE2_SET_OPTIMIZE 3 "22 September 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_parens_nest_limit.3 b/doc/pcre2_set_parens_nest_limit.3 index bc19bf0..3103ffd 100644 --- a/doc/pcre2_set_parens_nest_limit.3 +++ b/doc/pcre2_set_parens_nest_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_PARENS_NEST_LIMIT 3 "25 October 2014" "PCRE2 10.47" +.TH PCRE2_SET_PARENS_NEST_LIMIT 3 "25 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_recursion_limit.3 b/doc/pcre2_set_recursion_limit.3 index c0bc551..c5e5817 100644 --- a/doc/pcre2_set_recursion_limit.3 +++ b/doc/pcre2_set_recursion_limit.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_RECURSION_LIMIT 3 "19 July 2017" "PCRE2 10.47" +.TH PCRE2_SET_RECURSION_LIMIT 3 "19 July 2017" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_recursion_memory_management.3 b/doc/pcre2_set_recursion_memory_management.3 index 392e514..2de1ac6 100644 --- a/doc/pcre2_set_recursion_memory_management.3 +++ b/doc/pcre2_set_recursion_memory_management.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_RECURSION_MEMORY_MANAGEMENT 3 "23 January 2023" "PCRE2 10.47" +.TH PCRE2_SET_RECURSION_MEMORY_MANAGEMENT 3 "23 January 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_substitute_callout.3 b/doc/pcre2_set_substitute_callout.3 index a10359a..819e0a1 100644 --- a/doc/pcre2_set_substitute_callout.3 +++ b/doc/pcre2_set_substitute_callout.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_SUBSTITUTE_CALLOUT 3 "04 October 2024" "PCRE2 10.47" +.TH PCRE2_SET_SUBSTITUTE_CALLOUT 3 "04 October 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_set_substitute_case_callout.3 b/doc/pcre2_set_substitute_case_callout.3 index ab2f8f4..1ede07b 100644 --- a/doc/pcre2_set_substitute_case_callout.3 +++ b/doc/pcre2_set_substitute_case_callout.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SET_SUBSTITUTE_CASE_CALLOUT 3 "26 December 2024" "PCRE2 10.47" +.TH PCRE2_SET_SUBSTITUTE_CASE_CALLOUT 3 "26 December 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substitute.3 b/doc/pcre2_substitute.3 index b1fbd0c..666a187 100644 --- a/doc/pcre2_substitute.3 +++ b/doc/pcre2_substitute.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTITUTE 3 "03 October 2025" "PCRE2 10.47" +.TH PCRE2_SUBSTITUTE 3 "03 October 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_copy_byname.3 b/doc/pcre2_substring_copy_byname.3 index 78d05f4..24d986b 100644 --- a/doc/pcre2_substring_copy_byname.3 +++ b/doc/pcre2_substring_copy_byname.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_COPY_BYNAME 3 "19 December 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_COPY_BYNAME 3 "19 December 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_copy_bynumber.3 b/doc/pcre2_substring_copy_bynumber.3 index bb0e1ec..f8fcb7a 100644 --- a/doc/pcre2_substring_copy_bynumber.3 +++ b/doc/pcre2_substring_copy_bynumber.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_COPY_BYNUMBER 3 "13 December 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_COPY_BYNUMBER 3 "13 December 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_free.3 b/doc/pcre2_substring_free.3 index 47d13ed..10c5377 100644 --- a/doc/pcre2_substring_free.3 +++ b/doc/pcre2_substring_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_FREE 3 "26 February 2025" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_FREE 3 "26 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_get_byname.3 b/doc/pcre2_substring_get_byname.3 index 23abdaf..ccdddd9 100644 --- a/doc/pcre2_substring_get_byname.3 +++ b/doc/pcre2_substring_get_byname.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_GET_BYNAME 3 "19 December 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_GET_BYNAME 3 "19 December 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_get_bynumber.3 b/doc/pcre2_substring_get_bynumber.3 index ffa9dc6..d7fd8be 100644 --- a/doc/pcre2_substring_get_bynumber.3 +++ b/doc/pcre2_substring_get_bynumber.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_GET_BYNUMBER 3 "13 December 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_GET_BYNUMBER 3 "13 December 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_length_byname.3 b/doc/pcre2_substring_length_byname.3 index d9cc946..cbb4428 100644 --- a/doc/pcre2_substring_length_byname.3 +++ b/doc/pcre2_substring_length_byname.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_LENGTH_BYNAME 3 "26 September 2025" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_LENGTH_BYNAME 3 "26 September 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_length_bynumber.3 b/doc/pcre2_substring_length_bynumber.3 index 10e5233..1503957 100644 --- a/doc/pcre2_substring_length_bynumber.3 +++ b/doc/pcre2_substring_length_bynumber.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_LENGTH_BYNUMBER 3 "22 December 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_LENGTH_BYNUMBER 3 "22 December 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_list_free.3 b/doc/pcre2_substring_list_free.3 index ee78b4e..c31e5e5 100644 --- a/doc/pcre2_substring_list_free.3 +++ b/doc/pcre2_substring_list_free.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_LIST_FREE 3 "26 February 2025" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_LIST_FREE 3 "26 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_list_get.3 b/doc/pcre2_substring_list_get.3 index 50b50e4..9a5db54 100644 --- a/doc/pcre2_substring_list_get.3 +++ b/doc/pcre2_substring_list_get.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_LIST_GET 3 "21 October 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_LIST_GET 3 "21 October 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_nametable_scan.3 b/doc/pcre2_substring_nametable_scan.3 index fb93b2f..0898b0b 100644 --- a/doc/pcre2_substring_nametable_scan.3 +++ b/doc/pcre2_substring_nametable_scan.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_NAMETABLE_SCAN 3 "06 February 2019" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_NAMETABLE_SCAN 3 "06 February 2019" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2_substring_number_from_name.3 b/doc/pcre2_substring_number_from_name.3 index b9be3b5..e5aa7f9 100644 --- a/doc/pcre2_substring_number_from_name.3 +++ b/doc/pcre2_substring_number_from_name.3 @@ -1,4 +1,4 @@ -.TH PCRE2_SUBSTRING_NUMBER_FROM_NAME 3 "03 November 2014" "PCRE2 10.47" +.TH PCRE2_SUBSTRING_NUMBER_FROM_NAME 3 "03 November 2014" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2api.3 b/doc/pcre2api.3 index a5ea17b..f3df177 100644 --- a/doc/pcre2api.3 +++ b/doc/pcre2api.3 @@ -1,4 +1,4 @@ -.TH PCRE2API 3 "19 October 2025" "PCRE2 10.47" +.TH PCRE2API 3 "08 December 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .sp @@ -1296,14 +1296,18 @@ documentation for more details. .sp PCRE2_CONFIG_JITTARGET .sp -The \fIwhere\fP argument should point to a buffer that is at least 64 code -units long. (The exact length required can be found by calling -\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) The buffer is filled with a -string that contains the name of the architecture for which the JIT compiler is -configured, for example "x86 32bit (little endian + unaligned)". If JIT support -is not available, PCRE2_ERROR_BADOPTION is returned, otherwise the number of -code units used is returned. This is the length of the string, plus one unit -for the terminating zero. +The \fIwhere\fP argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 128 code units of buffer +capacity. However, this requirement is not guaranteed to be maintained, so +applications should call \fBpcre2_config()\fP with \fBwhere\fP set to NULL to +receive the required buffer size, then assert or allocate a suitably-size buffer +for a second call to \fBpcre2_config()\fP. The buffer is filled with a string +that contains the name of the architecture for which the JIT compiler is +configured at build time, for example, a 64-bit ARM CPU that supports the +Armv8.1 extension writes "ARM-64 (LSE) 64bit (little endian + unaligned)". If +JIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the +number of code units used is returned. This is the length of the string plus one +unit for the terminating zero. .sp PCRE2_CONFIG_LINKSIZE .sp @@ -1373,13 +1377,15 @@ below. .sp PCRE2_CONFIG_UNICODE_VERSION .sp -The \fIwhere\fP argument should point to a buffer that is at least 24 code -units long. (The exact length required can be found by calling -\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) If PCRE2 has been compiled -without Unicode support, the buffer is filled with the text "Unicode not -supported". Otherwise, the Unicode version string (for example, "8.0.0") is -inserted. The number of code units used is returned. This is the length of the -string plus one unit for the terminating zero. +The \fIwhere\fP argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 24 code units of buffer +capacity. However, applications should call \fBpcre2_config()\fP with +\fBwhere\fP set to NULL to receive the required buffer size, then assert or +allocate a suitably-size buffer for a second call to \fBpcre2_config()\fP. If +PCRE2 has been compiled without Unicode support, the buffer is filled with the +text "Unicode not supported". Otherwise, the Unicode version string (for +example, "8.0.0") is written. The number of code units used is returned. This is +the length of the string plus one unit for the terminating zero. .sp PCRE2_CONFIG_UNICODE .sp @@ -1388,12 +1394,14 @@ available; otherwise it is set to zero. Unicode support implies UTF support. .sp PCRE2_CONFIG_VERSION .sp -The \fIwhere\fP argument should point to a buffer that is at least 24 code -units long. (The exact length required can be found by calling -\fBpcre2_config()\fP with \fBwhere\fP set to NULL.) The buffer is filled with -the PCRE2 version string, zero-terminated. The number of code units used is -returned. This is the length of the string plus one unit for the terminating -zero. +The \fIwhere\fP argument should point to a code-unit-aligned buffer. All +previous versions of PCRE2 have required no more than 24 code units of buffer +capacity. However, applications should call \fBpcre2_config()\fP with +\fBwhere\fP set to NULL to receive the required buffer size, then assert or +allocate a suitably-size buffer for a second call to \fBpcre2_config()\fP. The +buffer is filled with the PCRE2 version string, zero-terminated. The number of +code units used is returned. This is the length of the string plus one unit for +the terminating zero. . . .\" HTML @@ -3543,7 +3551,7 @@ A common task for applications is to implement "global" matching behaviour, for example, replacing all matches in the subject; splitting the subject on all matches; or simply counting the number of matches. The \fBpcre2_next_match()\fP function helps with this task by providing the appropriate parameters for the -next match attempt (available since PCRE2 10.46). +next match attempt (available since PCRE2 10.47). .P First, a match attempt should be made using one of the matching functions (\fBpcre2_match()\fP, \fBpcre2_dfa_match()\fP, or \fBpcre2_jit_match()\fP). @@ -3920,6 +3928,14 @@ below) .\" can be used to separate them if necessary. .P +Partial matching is supported, with limitations: if matching succeeds but with a +partial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When +partial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed), +then PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else +PCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items +($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching, +even if a complete match is found. +.P The \fIoutlengthptr\fP argument of \fBpcre2_substitute()\fP must point to a variable that contains the length, in code units, of the output buffer. If the function is successful, the value is updated to contain the length in code @@ -4606,6 +4622,6 @@ Cambridge, England. .rs .sp .nf -Last updated: 19 October 2025 +Last updated: 08 December 2025 Copyright (c) 1997-2024 University of Cambridge. .fi diff --git a/doc/pcre2build.3 b/doc/pcre2build.3 index e7af55a..fa12121 100644 --- a/doc/pcre2build.3 +++ b/doc/pcre2build.3 @@ -1,4 +1,4 @@ -.TH PCRE2BUILD 3 "17 October 2025" "PCRE2 10.47" +.TH PCRE2BUILD 3 "17 October 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) . diff --git a/doc/pcre2callout.3 b/doc/pcre2callout.3 index 6ceefa4..f1bacb8 100644 --- a/doc/pcre2callout.3 +++ b/doc/pcre2callout.3 @@ -1,4 +1,4 @@ -.TH PCRE2CALLOUT 3 "26 February 2025" "PCRE2 10.47" +.TH PCRE2CALLOUT 3 "26 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH SYNOPSIS diff --git a/doc/pcre2compat.3 b/doc/pcre2compat.3 index 0a6dc1b..3ea2881 100644 --- a/doc/pcre2compat.3 +++ b/doc/pcre2compat.3 @@ -1,4 +1,4 @@ -.TH PCRE2COMPAT 3 "02 June 2025" "PCRE2 10.47" +.TH PCRE2COMPAT 3 "02 June 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "DIFFERENCES BETWEEN PCRE2 AND PERL" diff --git a/doc/pcre2convert.3 b/doc/pcre2convert.3 index 82448b5..ac1495b 100644 --- a/doc/pcre2convert.3 +++ b/doc/pcre2convert.3 @@ -1,4 +1,4 @@ -.TH PCRE2CONVERT 3 "14 November 2023" "PCRE2 10.47" +.TH PCRE2CONVERT 3 "14 November 2023" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "EXPERIMENTAL PATTERN CONVERSION FUNCTIONS" diff --git a/doc/pcre2demo.3 b/doc/pcre2demo.3 index fa08962..2d258af 100644 --- a/doc/pcre2demo.3 +++ b/doc/pcre2demo.3 @@ -1,4 +1,4 @@ -.TH PCRE2DEMO 3 "24 March 2025" "PCRE2 10.47" +.TH PCRE2DEMO 3 "24 March 2025" "PCRE2 10.48-RC1" .\"AUTOMATICALLY GENERATED BY UpdateAlways - do not EDIT! .SH NAME PCRE2DEMO - A demonstration C program for PCRE2 diff --git a/doc/pcre2grep.1 b/doc/pcre2grep.1 index 559d923..d7104bb 100644 --- a/doc/pcre2grep.1 +++ b/doc/pcre2grep.1 @@ -1,4 +1,4 @@ -.TH PCRE2GREP 1 "24 January 2025" "PCRE2 10.47" +.TH PCRE2GREP 1 "24 January 2025" "PCRE2 10.48-RC1" .SH NAME pcre2grep - a grep with Perl-compatible regular expressions. .SH SYNOPSIS diff --git a/doc/pcre2grep.txt b/doc/pcre2grep.txt index 55e362a..4842755 100644 --- a/doc/pcre2grep.txt +++ b/doc/pcre2grep.txt @@ -1103,4 +1103,4 @@ REVISION Copyright (c) 1997-2023 University of Cambridge. -PCRE2 10.47 24 January 2025 PCRE2GREP(1) +PCRE2 10.48-RC1 24 January 2025 PCRE2GREP(1) diff --git a/doc/pcre2jit.3 b/doc/pcre2jit.3 index 620b40c..23dcb91 100644 --- a/doc/pcre2jit.3 +++ b/doc/pcre2jit.3 @@ -1,4 +1,4 @@ -.TH PCRE2JIT 3 "22 August 2024" "PCRE2 10.47" +.TH PCRE2JIT 3 "08 August 2026" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 JUST-IN-TIME COMPILER SUPPORT" @@ -444,10 +444,11 @@ processed by \fBpcre2_jit_compile()\fP). The fast path function is called \fBpcre2_jit_match()\fP, and it takes exactly the same arguments as \fBpcre2_match()\fP. However, the subject string must be specified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported -option bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as -is the PCRE2_NO_JIT option. The return values are also the same as for -\fBpcre2_match()\fP, plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial -or complete) is requested that was not compiled. +option bits (for example, PCRE2_ANCHORED, PCRE2_ENDANCHORED, and +PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the PCRE2_NO_JIT option. The +return values are also the same as for \fBpcre2_match()\fP, plus +PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested +that was not compiled. .P When you call \fBpcre2_match()\fP, as well as testing for invalid options, a number of other sanity checks are performed on the arguments. For example, if @@ -484,6 +485,6 @@ Cambridge, England. .rs .sp .nf -Last updated: 22 August 2024 +Last updated: 08 August 2026 Copyright (c) 1997-2024 University of Cambridge. .fi diff --git a/doc/pcre2limits.3 b/doc/pcre2limits.3 index b5122ed..9b8e6a6 100644 --- a/doc/pcre2limits.3 +++ b/doc/pcre2limits.3 @@ -1,4 +1,4 @@ -.TH PCRE2LIMITS 3 "03 September 2025" "PCRE2 10.47" +.TH PCRE2LIMITS 3 "03 September 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "SIZE AND OTHER LIMITATIONS" diff --git a/doc/pcre2matching.3 b/doc/pcre2matching.3 index f84b071..23f6eb4 100644 --- a/doc/pcre2matching.3 +++ b/doc/pcre2matching.3 @@ -1,4 +1,4 @@ -.TH PCRE2MATCHING 3 "22 February 2025" "PCRE2 10.47" +.TH PCRE2MATCHING 3 "22 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 MATCHING ALGORITHMS" diff --git a/doc/pcre2partial.3 b/doc/pcre2partial.3 index 42a5c36..b55630e 100644 --- a/doc/pcre2partial.3 +++ b/doc/pcre2partial.3 @@ -1,4 +1,4 @@ -.TH PCRE2PARTIAL 3 "27 November 2024" "PCRE2 10.47" +.TH PCRE2PARTIAL 3 "16 August 2026" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PARTIAL MATCHING IN PCRE2" @@ -352,6 +352,19 @@ as described for \fBpcre2_match()\fP above. Another possibility is to work with two buffers. If a partial match at offset \fIn\fP in the first buffer is followed by "no match" when PCRE2_DFA_RESTART is used on the second buffer, you can then try a new match starting at offset \fIn+1\fP in the first buffer. +.P +Therefore, PCRE2_DFA_RESTART does not remove the need to keep earlier subject +data. In order to perform a bumpalong and continue matching at the next +character, all subject data from the current match start must be retained, +together with enough preceding data to satisfy the requirements of lookbehind +assertions (remembering as above that PCRE2_INFO_MAXLOOKBEHIND only describes +the buffer requirement of a single lookbehind, and nested lookbehinds can read +back further from the match start). This makes streaming match processing +using PCRE2_DFA_RESTART challenging, and the application cannot easily set a +bound on the number of chunks to buffer. For multi-segment searching that is +intended to produce the same result as searching the whole subject, it is +usually simpler to avoid PCRE2_DFA_RESTART and run a fresh match, using either +matching function, over the retained text. . . .SH AUTHOR @@ -368,6 +381,6 @@ Cambridge, England. .rs .sp .nf -Last updated: 27 November 2024 +Last updated: 16 August 2026 Copyright (c) 1997-2019 University of Cambridge. .fi diff --git a/doc/pcre2pattern.3 b/doc/pcre2pattern.3 index 0ad38db..489adc3 100644 --- a/doc/pcre2pattern.3 +++ b/doc/pcre2pattern.3 @@ -1,4 +1,4 @@ -.TH PCRE2PATTERN 3 "03 September 2025" "PCRE2 10.47" +.TH PCRE2PATTERN 3 "25 October 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 REGULAR EXPRESSION DETAILS" @@ -3499,7 +3499,7 @@ below. .SS "Recursion and subroutines with returned capture groups" .rs .sp -Since PCRE2 10.46, recursion and subroutine calls may also specify a list of +Since PCRE2 10.47, recursion and subroutine calls may also specify a list of capture groups to return. This is a PCRE2 syntax extension not supported by Perl. The pattern matching recurses into the referenced expression as described above, however, when the recursion returns to the calling expression the @@ -4230,6 +4230,6 @@ Cambridge, England. .rs .sp .nf -Last updated: 03 September 2025 +Last updated: 25 October 2025 Copyright (c) 1997-2024 University of Cambridge. .fi diff --git a/doc/pcre2perform.3 b/doc/pcre2perform.3 index f419559..1a8c2b5 100644 --- a/doc/pcre2perform.3 +++ b/doc/pcre2perform.3 @@ -1,4 +1,4 @@ -.TH PCRE2PERFORM 3 "06 December 2022" "PCRE2 10.47" +.TH PCRE2PERFORM 3 "06 December 2022" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 PERFORMANCE" diff --git a/doc/pcre2posix.3 b/doc/pcre2posix.3 index 359f017..59cfb77 100644 --- a/doc/pcre2posix.3 +++ b/doc/pcre2posix.3 @@ -1,4 +1,4 @@ -.TH PCRE2POSIX 3 "27 November 2024" "PCRE2 10.47" +.TH PCRE2POSIX 3 "27 November 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "SYNOPSIS" diff --git a/doc/pcre2sample.3 b/doc/pcre2sample.3 index 505c3a7..84a8c87 100644 --- a/doc/pcre2sample.3 +++ b/doc/pcre2sample.3 @@ -1,4 +1,4 @@ -.TH PCRE2SAMPLE 3 "28 February 2025" "PCRE2 10.47" +.TH PCRE2SAMPLE 3 "28 February 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 SAMPLE PROGRAM" diff --git a/doc/pcre2serialize.3 b/doc/pcre2serialize.3 index 15aa8fa..758e887 100644 --- a/doc/pcre2serialize.3 +++ b/doc/pcre2serialize.3 @@ -1,4 +1,4 @@ -.TH PCRE2SERIALIZE 3 "19 January 2024" "PCRE2 10.47" +.TH PCRE2SERIALIZE 3 "19 January 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "SAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS" diff --git a/doc/pcre2syntax.3 b/doc/pcre2syntax.3 index d1a611b..b9f23df 100644 --- a/doc/pcre2syntax.3 +++ b/doc/pcre2syntax.3 @@ -1,4 +1,4 @@ -.TH PCRE2SYNTAX 3 "14 October 2025" "PCRE2 10.47" +.TH PCRE2SYNTAX 3 "14 October 2025" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY" diff --git a/doc/pcre2test.1 b/doc/pcre2test.1 index 7dbc731..f66af14 100644 --- a/doc/pcre2test.1 +++ b/doc/pcre2test.1 @@ -1,4 +1,4 @@ -.TH PCRE2TEST 1 "12 October 2025" "PCRE2 10.47" +.TH PCRE2TEST 1 "22 August 2026" "PCRE2 10.48-RC1" .SH NAME pcre2test - a program for testing Perl-compatible regular expressions. .SH SYNOPSIS @@ -180,9 +180,11 @@ information. It returns one of the following values: If an unknown option is given, an error message is output; the exit code is 0. .TP 10 \fB--colo[u]r[=]\fP -By default, the output is coloured if the output file is a terminal (\fBauto\fP). -Force or suppress output of ANSI colour escapes with \fBalways\fP and \fBnever\fP -respectively. +With \fBauto\fP, the output is coloured if the output is to a terminal. Force or +suppress output of ANSI colour escapes with \fBalways\fP (or no specifier +provided) and \fBnever\fP respectively. If no colour option is provided, the +default is \fBauto\fP, unless the NO_COLOR environment variable is defined and +non-empty. .TP 10 \fB-d\fP Behave as if each pattern has the \fBdebug\fP modifier; the internal @@ -809,7 +811,7 @@ when it can never be used. The \fBframesize\fP modifier shows the size, in bytes, of each storage frame used by \fBpcre2_match()\fP for handling backtracking. The size depends on the number of capturing parentheses in the pattern. A vector of these frames is -used at matching time; its overall size is shown when the \fBheaframes_size\fP +used at matching time; its overall size is shown when the \fBheapframes_size\fP subject modifier is set. .P The \fBcallout_info\fP modifier requests information about all the callouts in @@ -2275,6 +2277,6 @@ Cambridge, England. .rs .sp .nf -Last updated: 12 October 2025 +Last updated: 22 August 2026 Copyright (c) 1997-2024 University of Cambridge. .fi diff --git a/doc/pcre2test.txt b/doc/pcre2test.txt index b868b91..5dc42f1 100644 --- a/doc/pcre2test.txt +++ b/doc/pcre2test.txt @@ -173,9 +173,11 @@ COMMAND LINE OPTIONS the exit code is 0. --colo[u]r[=] - By default, the output is coloured if the output file is a - terminal (auto). Force or suppress output of ANSI colour es- - capes with always and never respectively. + With auto, the output is coloured if the output is to a ter- + minal. Force or suppress output of ANSI colour escapes with + always (or no specifier provided) and never respectively. If + no colour option is provided, the default is auto, unless the + NO_COLOR environment variable is defined and non-empty. -d Behave as if each pattern has the debug modifier; the inter- nal form and information about the compiled pattern is output @@ -785,7 +787,7 @@ PATTERN MODIFIERS used by pcre2_match() for handling backtracking. The size depends on the number of capturing parentheses in the pattern. A vector of these frames is used at matching time; its overall size is shown when the - heaframes_size subject modifier is set. + heapframes_size subject modifier is set. The callout_info modifier requests information about all the callouts in the pattern. A list of them is output at the end of any other infor- @@ -2098,8 +2100,8 @@ AUTHOR REVISION - Last updated: 12 October 2025 + Last updated: 22 August 2026 Copyright (c) 1997-2024 University of Cambridge. -PCRE2 10.47 12 October 2025 PCRE2TEST(1) +PCRE2 10.48-RC1 22 August 2026 PCRE2TEST(1) diff --git a/doc/pcre2unicode.3 b/doc/pcre2unicode.3 index cb9f519..e6cda0a 100644 --- a/doc/pcre2unicode.3 +++ b/doc/pcre2unicode.3 @@ -1,4 +1,4 @@ -.TH PCRE2UNICODE 3 "27 November 2024" "PCRE2 10.47" +.TH PCRE2UNICODE 3 "27 November 2024" "PCRE2 10.48-RC1" .SH NAME PCRE2 - Perl-compatible regular expressions (revised API) .SH "UNICODE AND UTF SUPPORT" diff --git a/m4/ax_check_vscript.m4 b/m4/ax_check_vscript.m4 deleted file mode 100644 index ed834ef..0000000 --- a/m4/ax_check_vscript.m4 +++ /dev/null @@ -1,153 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_check_vscript.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_VSCRIPT -# -# DESCRIPTION -# -# Check whether the linker supports version scripts. Version scripts are -# used when building shared libraries to bind symbols to version nodes -# (helping to detect incompatibilities) or to limit the visibility of -# non-public symbols. -# -# Output: -# -# If version scripts are supported, VSCRIPT_LDFLAGS will contain the -# appropriate flag to pass to the linker. On GNU systems this would -# typically be "-Wl,--version-script", and on Solaris it would typically -# be "-Wl,-M". -# -# Two Automake conditionals are also set: -# -# HAVE_VSCRIPT is true if the linker supports version scripts with -# entries that use simple wildcards, like "local: *". -# -# HAVE_VSCRIPT_COMPLEX is true if the linker supports version scripts with -# pattern matching wildcards, like "global: Java_*". -# -# On systems that do not support symbol versioning, such as Mac OS X, both -# conditionals will be false. They will also be false if the user passes -# "--disable-symvers" on the configure command line. -# -# Example: -# -# configure.ac: -# -# AX_CHECK_VSCRIPT -# -# Makefile.am: -# -# if HAVE_VSCRIPT -# libfoo_la_LDFLAGS += $(VSCRIPT_LDFLAGS),@srcdir@/libfoo.map -# endif -# -# if HAVE_VSCRIPT_COMPLEX -# libbar_la_LDFLAGS += $(VSCRIPT_LDFLAGS),@srcdir@/libbar.map -# endif -# -# LICENSE -# -# Copyright (c) 2014 Kevin Cernekee -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 2.99 PCRE2 - -# _AX_CHECK_VSCRIPT(flag, global-sym, action-if-link-succeeds, [junk-file=no]) -AC_DEFUN([_AX_CHECK_VSCRIPT], [ - AC_LANG_PUSH([C]) - ax_check_vscript_save_flags="$LDFLAGS" - echo "V1 { global: $2; local: *; };" > conftest.map - AS_IF([test x$4 = xyes], [ - echo "{" >> conftest.map - ]) - LDFLAGS="$LDFLAGS -Wl,$1,conftest.map" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[int show, hide;]], [])], [$3]) - LDFLAGS="$ax_check_vscript_save_flags" - rm -f conftest.map - AC_LANG_POP([C]) -]) dnl _AX_CHECK_VSCRIPT - -AC_DEFUN([AX_CHECK_VSCRIPT], [ - - AC_ARG_ENABLE([symvers], - AS_HELP_STRING([--disable-symvers], - [disable library symbol versioning [default=auto]]), - [want_symvers=$enableval], - [want_symvers=yes] - ) - - AS_IF([test x$want_symvers = xyes], [ - - dnl First test --version-script and -M with a simple wildcard. - - AC_CACHE_CHECK([linker version script flag], ax_cv_check_vscript_flag, [ - ax_cv_check_vscript_flag=unsupported - _AX_CHECK_VSCRIPT([--version-script], [show], [ - ax_cv_check_vscript_flag=--version-script - ]) - AS_IF([test x$ax_cv_check_vscript_flag = xunsupported], [ - # PCRE2: Support for FreeBSD. Rather annoyingly, AC_LINK_IFELSE will - # only test linking executables, and in turn, on FreeBSD the main - # entrypoint will fail to link if you use "local: *" to hide the - # visibility of various shared symbols injected from /usr/lib/crt1.o. - # It's not at all pretty to hardcode those symbol names here, but I - # can't think of an obvious way to improve on this. - _AX_CHECK_VSCRIPT([--version-script], [show;environ;__progname], [ - ax_cv_check_vscript_flag=--version-script - ]) - ]) - AS_IF([test x$ax_cv_check_vscript_flag = xunsupported], [ - _AX_CHECK_VSCRIPT([-M], [show], [ax_cv_check_vscript_flag=-M]) - ]) - - dnl The linker may interpret -M (no argument) as "produce a load map." - dnl If "-M conftest.map" doesn't fail when conftest.map contains - dnl obvious syntax errors, assume this is the case. - - AS_IF([test x$ax_cv_check_vscript_flag != xunsupported], [ - _AX_CHECK_VSCRIPT([$ax_cv_check_vscript_flag], [show], - [ax_cv_check_vscript_flag=unsupported], [yes]) - ]) - ]) - - dnl If the simple wildcard worked, retest with a complex wildcard. - - AS_IF([test x$ax_cv_check_vscript_flag != xunsupported], [ - ax_check_vscript_flag=$ax_cv_check_vscript_flag - AC_CACHE_CHECK([if version scripts can use complex wildcards], - ax_cv_check_vscript_complex_wildcards, [ - ax_cv_check_vscript_complex_wildcards=no - _AX_CHECK_VSCRIPT([$ax_cv_check_vscript_flag], [sh*], [ - ax_cv_check_vscript_complex_wildcards=yes]) - ]) - ax_check_vscript_complex_wildcards="$ax_cv_check_vscript_complex_wildcards" - ], [ - ax_check_vscript_flag= - ax_check_vscript_complex_wildcards=no - ]) - ], [ - AC_MSG_CHECKING([linker version script flag]) - AC_MSG_RESULT([disabled]) - - ax_check_vscript_flag= - ax_check_vscript_complex_wildcards=no - ]) - - AS_IF([test x$ax_check_vscript_flag != x], [ - VSCRIPT_LDFLAGS="-Wl,$ax_check_vscript_flag" - AC_SUBST([VSCRIPT_LDFLAGS]) - ]) - - AM_CONDITIONAL([HAVE_VSCRIPT], - [test x$ax_check_vscript_flag != x]) - AM_CONDITIONAL([HAVE_VSCRIPT_COMPLEX], - [test x$ax_check_vscript_complex_wildcards = xyes]) - -]) dnl AX_CHECK_VSCRIPT diff --git a/m4/pcre2_check_vscript.m4 b/m4/pcre2_check_vscript.m4 new file mode 100644 index 0000000..cfe67e4 --- /dev/null +++ b/m4/pcre2_check_vscript.m4 @@ -0,0 +1,118 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_vscript.html +# =========================================================================== +# +# Our pcre2_check_vscript.m4 is derived from the upstream ax_check_vscript.m4, +# with several modifications. +# +# The original upstream file requires the following notice: +# +# LICENSE +# +# Copyright (c) 2014 Kevin Cernekee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2.99 PCRE2 + +# _PCRE2_CHECK_VSCRIPT_SHLIB(flag, map-contents, action-if-link-succeeds) +# Build a shared library with the given linker flag and map file contents. +# This properly tests version script support by building a shared library +# rather than an executable, avoiding issues with executable-specific symbols +# (e.g. FreeBSD's crt1.o symbols, Solaris linker symbols in values-Xc.o). +# Uses libtool for portability across different platforms. +AC_DEFUN([_PCRE2_CHECK_VSCRIPT_SHLIB], [ + rm -rf conftest.vscript + mkdir conftest.vscript + cat > conftest.vscript/conftest.c <<_ACEOF +int hidethis(void) { return 0; } +int exposethis(void) { return hidethis(); } +_ACEOF + echo "$2" > conftest.vscript/conftest.map + _pcre2_abs_top_builddir="$ac_pwd" + _pcre2_vscript_libtool="$SHELL $_pcre2_abs_top_builddir/libtool" + _pcre2_vscript_cc="$CC" + _pcre2_vscript_compile_flags="$CFLAGS $CPPFLAGS" + _pcre2_vscript_ld_flags="$CFLAGS $LDFLAGS" + _pcre2_vscript_script_flag="$1" + export _pcre2_vscript_libtool + export _pcre2_vscript_cc + export _pcre2_vscript_compile_flags + export _pcre2_vscript_ld_flags + export _pcre2_vscript_script_flag + AS_IF([(cd conftest.vscript && \ + $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \ + $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&AS_MESSAGE_LOG_FD 2>&1], [$3]) + unset _pcre2_vscript_libtool + unset _pcre2_vscript_cc + unset _pcre2_vscript_compile_flags + unset _pcre2_vscript_ld_flags + unset _pcre2_vscript_script_flag + rm -rf conftest.vscript +]) dnl _PCRE2_CHECK_VSCRIPT_SHLIB + +AC_DEFUN([PCRE2_CHECK_VSCRIPT], [ + + AC_ARG_ENABLE([symvers], + AS_HELP_STRING([--disable-symvers], + [disable library symbol versioning [default=auto]]), + [want_symvers=$enableval], + [want_symvers=yes] + ) + + AS_IF([test x$want_symvers = xyes], [ + + dnl First, test --version-script and -M with a simple wildcard. + AC_CACHE_CHECK([linker version script flag], pcre2_cv_check_vscript_flag, [ + pcre2_cv_check_vscript_flag=unsupported + + _PCRE2_CHECK_VSCRIPT_SHLIB([--version-script], + [PCRE2_10.00 { global: exposethis; local: *; };], + [pcre2_cv_check_vscript_flag=--version-script]) + AS_IF([test x$pcre2_cv_check_vscript_flag = xunsupported], [ + _PCRE2_CHECK_VSCRIPT_SHLIB([-M], + [PCRE2_10.00 { global: exposethis; local: *; };], + [pcre2_cv_check_vscript_flag=-M]) + ]) + + dnl The linker may interpret -M (no argument) as "produce a load map." + dnl If "-M conftest.map" doesn't fail when conftest.map contains + dnl obvious syntax errors, assume this is the case. + + AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [ + _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag], + [PCRE2_10.00 { global: exposethis; local: *; }; {], + [pcre2_cv_check_vscript_flag=unsupported]) + ]) + ]) + + AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [ + + dnl Test without wildcard - for detecting Solaris, which requires the + dnl wildcard (or else a much more complex and brittle configuration). + AC_CACHE_CHECK([if version scripts work without wildcard], + pcre2_cv_check_vscript_no_star, [ + pcre2_cv_check_vscript_no_star=no + _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag], + [PCRE2_10.00 { global: exposethis; local: hidethis; };], + [pcre2_cv_check_vscript_no_star=yes]) + ]) + + pcre2_check_vscript_flag=$pcre2_cv_check_vscript_flag + pcre2_check_vscript_no_star=$pcre2_cv_check_vscript_no_star + ], [ + pcre2_check_vscript_flag= + pcre2_check_vscript_no_star=no + ]) + ], [ + AC_MSG_CHECKING([linker version script flag]) + AC_MSG_RESULT([disabled]) + + pcre2_check_vscript_flag= + pcre2_check_vscript_no_star=no + ]) + +]) dnl PCRE2_CHECK_VSCRIPT diff --git a/patches/pcre2-10.37-Remove-real-POSIX.patch b/patches/pcre2-10.37-Remove-real-POSIX.patch new file mode 100644 index 0000000..22b50c0 --- /dev/null +++ b/patches/pcre2-10.37-Remove-real-POSIX.patch @@ -0,0 +1,40 @@ +commit 080d7789eba00b570181dfe28809b01aa88c01f8 +Author: Philip.Hazel +Date: Tue Apr 27 08:36:47 2021 +0000 + + Remove real POSIX function names from the pcre2-posix library. + +diff --git a/src/pcre2posix.c b/src/pcre2posix.c +index b24620a4..32c80c3f 100644 +--- a/src/pcre2posix.c ++++ b/src/pcre2posix.c +@@ -175,6 +175,20 @@ static const char *const pstring[] = { + + + ++#if 0 /* REMOVE THIS CODE */ ++ ++The code below was created for 10.33 (see ChangeLog 10.33 #4) when the ++POSIX functions were given pcre2_... names instead of the traditional POSIX ++names. However, it has proved to be more troublesome than useful. There have ++been at least two cases where a program links with two others, one of which ++uses the POSIX library and the other uses the PCRE2 POSIX functions, thus ++causing two instances of the POSIX runctions to exist, leading to trouble. For ++10.37 this code is commented out. In due course it can be removed if there are ++no issues. The only small worry is the comment below about languages that do ++not include pcre2posix.h. If there are any such cases, they will have to use ++the PCRE2 names. ++ ++ + /************************************************* + * Wrappers with traditional POSIX names * + *************************************************/ +@@ -218,7 +232,7 @@ regexec(const regex_t *preg, const char *string, size_t nmatch, + { + return pcre2_regexec(preg, string, nmatch, pmatch, eflags); + } +- ++#endif + + + /************************************************* diff --git a/patches/pcre2-10.39-Fix-incorrect-detection.patch b/patches/pcre2-10.39-Fix-incorrect-detection.patch new file mode 100644 index 0000000..6048a79 --- /dev/null +++ b/patches/pcre2-10.39-Fix-incorrect-detection.patch @@ -0,0 +1,73 @@ +commit 51ec2c9893e7dac762b70033b85f55801b01176c +Author: Zoltan Herczeg +Date: Tue Oct 5 16:40:57 2021 +0000 + + Fix incorrect detection of alternatives in first character search. + +diff --git a/ChangeLog b/ChangeLog +index e0ac9b3b..05b317c2 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,6 +1,12 @@ + Change Log for PCRE2 + -------------------- + ++Version 10.39-RC1 xx-xxx-2021 ++----------------------------- ++ ++1. Fix incorrect detection of alternatives in first character search. ++ ++ + Version 10.38 01-October-2021 + ----------------------------- + +diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c +index 495920de..2c614065 100644 +--- a/src/pcre2_jit_compile.c ++++ b/src/pcre2_jit_compile.c +@@ -1251,10 +1251,13 @@ SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA); + SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0); + SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX); + ++next_alt = cc + GET(cc, 1); ++if (*next_alt == OP_ALT) ++ fast_forward_allowed = FALSE; ++ + do + { + count = start; +- next_alt = cc + GET(cc, 1); + cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0); + + while (TRUE) +@@ -1512,7 +1515,7 @@ do + { + count++; + +- if (fast_forward_allowed && *next_alt == OP_KET) ++ if (fast_forward_allowed) + { + common->fast_forward_bc_ptr = accelerated_start; + common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip; +@@ -1562,8 +1565,8 @@ do + else if (result < count) + result = count; + +- fast_forward_allowed = FALSE; + cc = next_alt; ++ next_alt = cc + GET(cc, 1); + } + while (*cc == OP_ALT); + +diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c +index f7480165..8dee16e5 100644 +--- a/src/pcre2_jit_test.c ++++ b/src/pcre2_jit_test.c +@@ -352,6 +352,7 @@ static struct regression_test_case regression_test_cases[] = { + { MU, A, 0, 0, ".[ab]?.", "xx" }, + { MU, A, 0, 0, "_[ab]+_*a", "_aa" }, + { MU, A, 0, 0, "#(A+)#\\d+", "#A#A#0" }, ++ { MU, A, 0, 0, "(?P\\d+)m|M", "4M" }, + + /* Bracket repeats with limit. */ + { MU, A, 0, 0, "(?:(ab){2}){5}M", "abababababababababababM" }, diff --git a/patches/pcre2-10.40-A-Fixed-a-unicode.patch b/patches/pcre2-10.40-A-Fixed-a-unicode.patch new file mode 100644 index 0000000..2d89da9 --- /dev/null +++ b/patches/pcre2-10.40-A-Fixed-a-unicode.patch @@ -0,0 +1,50 @@ +commit d4fa336fbcc388f89095b184ba6d99422cfc676c +Author: Zoltan Herczeg +Date: Thu Mar 24 05:34:42 2022 +0000 + + Fix incorrect value reading in JIT. + +commit 50a51cb7e67268e6ad417eb07c9de9bfea5cc55a +Author: Zoltan Herczeg +Date: Wed Mar 23 07:53:25 2022 +0000 + + Fixed a unicode properrty matching issue in JIT +diff --git a/ChangeLog b/ChangeLog +index f0eab7ba..ffb08805 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -92,6 +92,9 @@ pattern, the optimizing "must be present for a match" character check was not + being flagged as caseless, causing some matches that should have succeeded to + fail. + ++23. Fixed a unicode properrty matching issue in JIT. The character was not ++fully read in caseless matching. ++ + + Version 10.39 29-October-2021 + ----------------------------- +diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c +index e7dd26c5..7fcdac86 100644 +--- a/src/pcre2_jit_compile.c ++++ b/src/pcre2_jit_compile.c +@@ -7489,7 +7489,7 @@ while (*cc != XCL_END) + { + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; +- if (*cc == PT_CLIST) ++ if (*cc == PT_CLIST && cc[-1] == XCL_PROP) + { + other_cases = PRIV(ucd_caseless_sets) + cc[1]; + while (*other_cases != NOTACHAR) +diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c +index 3b57ce29..8450f0b6 100644 +--- a/src/pcre2_jit_test.c ++++ b/src/pcre2_jit_test.c +@@ -415,6 +415,7 @@ static struct regression_test_case regression_test_cases[] = { + { MUP, 0, 0, 0 | F_NOMATCH, "[^\\p{Hangul}\\p{Z}]", " " }, + { MUP, 0, 0, 0, "[\\p{Lu}\\P{Latin}]+", "c\xEA\xA4\xAE,A,b" }, + { MUP, 0, 0, 0, "[\\x{a92e}\\p{Lu}\\P{Latin}]+", "c\xEA\xA4\xAE,A,b" }, ++ { CMUP, 0, 0, 0, "[^S]\\B", "\xe2\x80\x8a" }, + + /* Possible empty brackets. */ + { MU, A, 0, 0, "(?:|ab||bc|a)+d", "abcxabcabd" }, diff --git a/patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch b/patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch new file mode 100644 index 0000000..c6bf2fd --- /dev/null +++ b/patches/pcre2-10.40-B-Fixed-an-issue-affecting.patch @@ -0,0 +1,648 @@ +commit 03654e751e7f0700693526b67dfcadda6b42c9d0 +Author: Zoltan Herczeg +Date: Sat Mar 26 07:55:50 2022 +0000 + + Fixed an issue affecting recursions in JIT + +diff --git a/ChangeLog b/ChangeLog +index ffb08805..a8000774 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -95,6 +95,9 @@ fail. + 23. Fixed a unicode properrty matching issue in JIT. The character was not + fully read in caseless matching. + ++24. Fixed an issue affecting recursions in JIT caused by duplicated data ++transfers. ++ + + Version 10.39 29-October-2021 + ----------------------------- +diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c +index 7fcdac86..bf71d158 100644 +--- a/src/pcre2_jit_compile.c ++++ b/src/pcre2_jit_compile.c +@@ -413,6 +413,9 @@ typedef struct compiler_common { + /* Locals used by fast fail optimization. */ + sljit_s32 early_fail_start_ptr; + sljit_s32 early_fail_end_ptr; ++ /* Variables used by recursive call generator. */ ++ sljit_s32 recurse_bitset_size; ++ uint8_t *recurse_bitset; + + /* Flipped and lower case tables. */ + const sljit_u8 *fcc; +@@ -2317,19 +2320,39 @@ for (i = 0; i < RECURSE_TMP_REG_COUNT; i++) + + #undef RECURSE_TMP_REG_COUNT + ++static BOOL recurse_check_bit(compiler_common *common, sljit_sw bit_index) ++{ ++uint8_t *byte; ++uint8_t mask; ++ ++SLJIT_ASSERT((bit_index & (sizeof(sljit_sw) - 1)) == 0); ++ ++bit_index >>= SLJIT_WORD_SHIFT; ++ ++mask = 1 << (bit_index & 0x7); ++byte = common->recurse_bitset + (bit_index >> 3); ++ ++if (*byte & mask) ++ return FALSE; ++ ++*byte |= mask; ++return TRUE; ++} ++ + static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, + BOOL *needs_control_head, BOOL *has_quit, BOOL *has_accept) + { + int length = 1; +-int size; ++int size, offset; + PCRE2_SPTR alternative; + BOOL quit_found = FALSE; + BOOL accept_found = FALSE; + BOOL setsom_found = FALSE; + BOOL setmark_found = FALSE; +-BOOL capture_last_found = FALSE; + BOOL control_head_found = FALSE; + ++memset(common->recurse_bitset, 0, common->recurse_bitset_size); ++ + #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD + SLJIT_ASSERT(common->control_head_ptr != 0); + control_head_found = TRUE; +@@ -2352,15 +2375,17 @@ while (cc < ccend) + setsom_found = TRUE; + if (common->mark_ptr != 0) + setmark_found = TRUE; +- if (common->capture_last_ptr != 0) +- capture_last_found = TRUE; ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) ++ length++; + cc += 1 + LINK_SIZE; + break; + + case OP_KET: +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0) + { +- length++; ++ if (recurse_check_bit(common, offset)) ++ length++; + SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); + cc += PRIVATE_DATA(cc + 1); + } +@@ -2379,39 +2404,55 @@ while (cc < ccend) + case OP_SBRA: + case OP_SBRAPOS: + case OP_SCOND: +- length++; + SLJIT_ASSERT(PRIVATE_DATA(cc) != 0); ++ if (recurse_check_bit(common, PRIVATE_DATA(cc))) ++ length++; + cc += 1 + LINK_SIZE; + break; + + case OP_CBRA: + case OP_SCBRA: +- length += 2; +- if (common->capture_last_ptr != 0) +- capture_last_found = TRUE; +- if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) ++ offset = GET2(cc, 1 + LINK_SIZE); ++ if (recurse_check_bit(common, OVECTOR(offset << 1))) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); ++ length += 2; ++ } ++ if (common->optimized_cbracket[offset] == 0 && recurse_check_bit(common, OVECTOR_PRIV(offset))) ++ length++; ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + length++; + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; + + case OP_CBRAPOS: + case OP_SCBRAPOS: +- length += 2 + 2; +- if (common->capture_last_ptr != 0) +- capture_last_found = TRUE; ++ offset = GET2(cc, 1 + LINK_SIZE); ++ if (recurse_check_bit(common, OVECTOR(offset << 1))) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); ++ length += 2; ++ } ++ if (recurse_check_bit(common, OVECTOR_PRIV(offset))) ++ length++; ++ if (recurse_check_bit(common, PRIVATE_DATA(cc))) ++ length++; ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) ++ length++; + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; + + case OP_COND: + /* Might be a hidden SCOND. */ + alternative = cc + GET(cc, 1); +- if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) ++ if ((*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) && recurse_check_bit(common, PRIVATE_DATA(cc))) + length++; + cc += 1 + LINK_SIZE; + break; + + CASE_ITERATOR_PRIVATE_DATA_1 +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) + length++; + cc += 2; + #ifdef SUPPORT_UNICODE +@@ -2420,8 +2461,12 @@ while (cc < ccend) + break; + + CASE_ITERATOR_PRIVATE_DATA_2A +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); + length += 2; ++ } + cc += 2; + #ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); +@@ -2429,8 +2474,12 @@ while (cc < ccend) + break; + + CASE_ITERATOR_PRIVATE_DATA_2B +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); + length += 2; ++ } + cc += 2 + IMM2_SIZE; + #ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); +@@ -2438,20 +2487,29 @@ while (cc < ccend) + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_1 +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) + length++; + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2A +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); + length += 2; ++ } + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2B +- if (PRIVATE_DATA(cc) != 0) ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) ++ { ++ SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); + length += 2; ++ } + cc += 1 + IMM2_SIZE; + break; + +@@ -2463,7 +2521,9 @@ while (cc < ccend) + #else + size = 1 + 32 / (int)sizeof(PCRE2_UCHAR); + #endif +- if (PRIVATE_DATA(cc) != 0) ++ ++ offset = PRIVATE_DATA(cc); ++ if (offset != 0 && recurse_check_bit(common, offset)) + length += get_class_iterator_size(cc + size); + cc += size; + break; +@@ -2498,8 +2558,7 @@ while (cc < ccend) + case OP_THEN: + SLJIT_ASSERT(common->control_head_ptr != 0); + quit_found = TRUE; +- if (!control_head_found) +- control_head_found = TRUE; ++ control_head_found = TRUE; + cc++; + break; + +@@ -2519,8 +2578,6 @@ SLJIT_ASSERT(cc == ccend); + + if (control_head_found) + length++; +-if (capture_last_found) +- length++; + if (quit_found) + { + if (setsom_found) +@@ -2553,14 +2610,12 @@ sljit_sw shared_srcw[3]; + sljit_sw kept_shared_srcw[2]; + int private_count, shared_count, kept_shared_count; + int from_sp, base_reg, offset, i; +-BOOL setsom_found = FALSE; +-BOOL setmark_found = FALSE; +-BOOL capture_last_found = FALSE; +-BOOL control_head_found = FALSE; ++ ++memset(common->recurse_bitset, 0, common->recurse_bitset_size); + + #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD + SLJIT_ASSERT(common->control_head_ptr != 0); +-control_head_found = TRUE; ++recurse_check_bit(common, common->control_head_ptr); + #endif + + switch (type) +@@ -2648,11 +2703,10 @@ while (cc < ccend) + { + case OP_SET_SOM: + SLJIT_ASSERT(common->has_set_som); +- if (has_quit && !setsom_found) ++ if (has_quit && recurse_check_bit(common, OVECTOR(0))) + { + kept_shared_srcw[0] = OVECTOR(0); + kept_shared_count = 1; +- setsom_found = TRUE; + } + cc += 1; + break; +@@ -2660,33 +2714,31 @@ while (cc < ccend) + case OP_RECURSE: + if (has_quit) + { +- if (common->has_set_som && !setsom_found) ++ if (common->has_set_som && recurse_check_bit(common, OVECTOR(0))) + { + kept_shared_srcw[0] = OVECTOR(0); + kept_shared_count = 1; +- setsom_found = TRUE; + } +- if (common->mark_ptr != 0 && !setmark_found) ++ if (common->mark_ptr != 0 && recurse_check_bit(common, common->mark_ptr)) + { + kept_shared_srcw[kept_shared_count] = common->mark_ptr; + kept_shared_count++; +- setmark_found = TRUE; + } + } +- if (common->capture_last_ptr != 0 && !capture_last_found) ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + { + shared_srcw[0] = common->capture_last_ptr; + shared_count = 1; +- capture_last_found = TRUE; + } + cc += 1 + LINK_SIZE; + break; + + case OP_KET: +- if (PRIVATE_DATA(cc) != 0) ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0) + { +- private_count = 1; +- private_srcw[0] = PRIVATE_DATA(cc); ++ if (recurse_check_bit(common, private_srcw[0])) ++ private_count = 1; + SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); + cc += PRIVATE_DATA(cc + 1); + } +@@ -2705,50 +2757,66 @@ while (cc < ccend) + case OP_SBRA: + case OP_SBRAPOS: + case OP_SCOND: +- private_count = 1; + private_srcw[0] = PRIVATE_DATA(cc); ++ if (recurse_check_bit(common, private_srcw[0])) ++ private_count = 1; + cc += 1 + LINK_SIZE; + break; + + case OP_CBRA: + case OP_SCBRA: +- offset = (GET2(cc, 1 + LINK_SIZE)) << 1; +- shared_srcw[0] = OVECTOR(offset); +- shared_srcw[1] = OVECTOR(offset + 1); +- shared_count = 2; ++ offset = GET2(cc, 1 + LINK_SIZE); ++ shared_srcw[0] = OVECTOR(offset << 1); ++ if (recurse_check_bit(common, shared_srcw[0])) ++ { ++ shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); ++ shared_count = 2; ++ } + +- if (common->capture_last_ptr != 0 && !capture_last_found) ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + { +- shared_srcw[2] = common->capture_last_ptr; +- shared_count = 3; +- capture_last_found = TRUE; ++ shared_srcw[shared_count] = common->capture_last_ptr; ++ shared_count++; + } + +- if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) ++ if (common->optimized_cbracket[offset] == 0) + { +- private_count = 1; +- private_srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); ++ private_srcw[0] = OVECTOR_PRIV(offset); ++ if (recurse_check_bit(common, private_srcw[0])) ++ private_count = 1; + } ++ + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; + + case OP_CBRAPOS: + case OP_SCBRAPOS: +- offset = (GET2(cc, 1 + LINK_SIZE)) << 1; +- shared_srcw[0] = OVECTOR(offset); +- shared_srcw[1] = OVECTOR(offset + 1); +- shared_count = 2; ++ offset = GET2(cc, 1 + LINK_SIZE); ++ shared_srcw[0] = OVECTOR(offset << 1); ++ if (recurse_check_bit(common, shared_srcw[0])) ++ { ++ shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); ++ shared_count = 2; ++ } + +- if (common->capture_last_ptr != 0 && !capture_last_found) ++ if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + { +- shared_srcw[2] = common->capture_last_ptr; +- shared_count = 3; +- capture_last_found = TRUE; ++ shared_srcw[shared_count] = common->capture_last_ptr; ++ shared_count++; + } + +- private_count = 2; + private_srcw[0] = PRIVATE_DATA(cc); +- private_srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); ++ if (recurse_check_bit(common, private_srcw[0])) ++ private_count = 1; ++ ++ offset = OVECTOR_PRIV(offset); ++ if (recurse_check_bit(common, offset)) ++ { ++ private_srcw[private_count] = offset; ++ private_count++; ++ } + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; + +@@ -2757,18 +2825,17 @@ while (cc < ccend) + alternative = cc + GET(cc, 1); + if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) + { +- private_count = 1; + private_srcw[0] = PRIVATE_DATA(cc); ++ if (recurse_check_bit(common, private_srcw[0])) ++ private_count = 1; + } + cc += 1 + LINK_SIZE; + break; + + CASE_ITERATOR_PRIVATE_DATA_1 +- if (PRIVATE_DATA(cc)) +- { ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + private_count = 1; +- private_srcw[0] = PRIVATE_DATA(cc); +- } + cc += 2; + #ifdef SUPPORT_UNICODE + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); +@@ -2776,11 +2843,12 @@ while (cc < ccend) + break; + + CASE_ITERATOR_PRIVATE_DATA_2A +- if (PRIVATE_DATA(cc)) ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; +- private_srcw[0] = PRIVATE_DATA(cc); +- private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); ++ private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } + cc += 2; + #ifdef SUPPORT_UNICODE +@@ -2789,11 +2857,12 @@ while (cc < ccend) + break; + + CASE_ITERATOR_PRIVATE_DATA_2B +- if (PRIVATE_DATA(cc)) ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; +- private_srcw[0] = PRIVATE_DATA(cc); +- private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); ++ private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } + cc += 2 + IMM2_SIZE; + #ifdef SUPPORT_UNICODE +@@ -2802,30 +2871,30 @@ while (cc < ccend) + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_1 +- if (PRIVATE_DATA(cc)) +- { ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + private_count = 1; +- private_srcw[0] = PRIVATE_DATA(cc); +- } + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2A +- if (PRIVATE_DATA(cc)) ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; +- private_srcw[0] = PRIVATE_DATA(cc); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2B +- if (PRIVATE_DATA(cc)) ++ private_srcw[0] = PRIVATE_DATA(cc); ++ if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; +- private_srcw[0] = PRIVATE_DATA(cc); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } + cc += 1 + IMM2_SIZE; + break; +@@ -2842,14 +2911,17 @@ while (cc < ccend) + switch(get_class_iterator_size(cc + i)) + { + case 1: +- private_count = 1; + private_srcw[0] = PRIVATE_DATA(cc); + break; + + case 2: +- private_count = 2; + private_srcw[0] = PRIVATE_DATA(cc); +- private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ if (recurse_check_bit(common, private_srcw[0])) ++ { ++ private_count = 2; ++ private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); ++ SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); ++ } + break; + + default: +@@ -2864,28 +2936,25 @@ while (cc < ccend) + case OP_PRUNE_ARG: + case OP_THEN_ARG: + SLJIT_ASSERT(common->mark_ptr != 0); +- if (has_quit && !setmark_found) ++ if (has_quit && recurse_check_bit(common, common->mark_ptr)) + { + kept_shared_srcw[0] = common->mark_ptr; + kept_shared_count = 1; +- setmark_found = TRUE; + } +- if (common->control_head_ptr != 0 && !control_head_found) ++ if (common->control_head_ptr != 0 && recurse_check_bit(common, common->control_head_ptr)) + { + private_srcw[0] = common->control_head_ptr; + private_count = 1; +- control_head_found = TRUE; + } + cc += 1 + 2 + cc[1]; + break; + + case OP_THEN: + SLJIT_ASSERT(common->control_head_ptr != 0); +- if (!control_head_found) ++ if (recurse_check_bit(common, common->control_head_ptr)) + { + private_srcw[0] = common->control_head_ptr; + private_count = 1; +- control_head_found = TRUE; + } + cc++; + break; +@@ -2893,7 +2962,7 @@ while (cc < ccend) + default: + cc = next_opcode(common, cc); + SLJIT_ASSERT(cc != NULL); +- break; ++ continue; + } + + if (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global) +@@ -13811,7 +13880,7 @@ SLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0)); + common->cbra_ptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw); + + total_length = ccend - common->start; +-common->private_data_ptrs = (sljit_s32 *)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); ++common->private_data_ptrs = (sljit_s32*)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); + if (!common->private_data_ptrs) + { + SLJIT_FREE(common->optimized_cbracket, allocator_data); +@@ -13852,6 +13921,7 @@ if (!compiler) + common->compiler = compiler; + + /* Main pcre2_jit_exec entry. */ ++SLJIT_ASSERT((private_data_size & (sizeof(sljit_sw) - 1)) == 0); + sljit_emit_enter(compiler, 0, SLJIT_ARGS1(W, W), 5, 5, 0, 0, private_data_size); + + /* Register init. */ +@@ -14074,20 +14144,40 @@ common->early_fail_end_ptr = 0; + common->currententry = common->entries; + common->local_quit_available = TRUE; + quit_label = common->quit_label; +-while (common->currententry != NULL) ++if (common->currententry != NULL) + { +- /* Might add new entries. */ +- compile_recurse(common); +- if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) ++ /* A free bit for each private data. */ ++ common->recurse_bitset_size = ((private_data_size / (int)sizeof(sljit_sw)) + 7) >> 3; ++ SLJIT_ASSERT(common->recurse_bitset_size > 0); ++ common->recurse_bitset = (sljit_u8*)SLJIT_MALLOC(common->recurse_bitset_size, allocator_data);; ++ ++ if (common->recurse_bitset != NULL) ++ { ++ do ++ { ++ /* Might add new entries. */ ++ compile_recurse(common); ++ if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) ++ break; ++ flush_stubs(common); ++ common->currententry = common->currententry->next; ++ } ++ while (common->currententry != NULL); ++ ++ SLJIT_FREE(common->recurse_bitset, allocator_data); ++ } ++ ++ if (common->currententry != NULL) + { ++ /* The common->recurse_bitset has been freed. */ ++ SLJIT_ASSERT(sljit_get_compiler_error(compiler) || common->recurse_bitset == NULL); ++ + sljit_free_compiler(compiler); + SLJIT_FREE(common->optimized_cbracket, allocator_data); + SLJIT_FREE(common->private_data_ptrs, allocator_data); + PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data); + return PCRE2_ERROR_NOMEMORY; + } +- flush_stubs(common); +- common->currententry = common->currententry->next; + } + common->local_quit_available = FALSE; + common->quit_label = quit_label; +diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c +index 8450f0b6..bb141a0c 100644 +--- a/src/pcre2_jit_test.c ++++ b/src/pcre2_jit_test.c +@@ -751,6 +751,7 @@ static struct regression_test_case regression_test_cases[] = { + { MU, A, 0, 0, "((?(R)a|(?1)){1,3}?)M", "aaaM" }, + { MU, A, 0, 0, "((.)(?:.|\\2(?1))){0}#(?1)#", "#aabbccdde# #aabbccddee#" }, + { MU, A, 0, 0, "((.)(?:\\2|\\2{4}b)){0}#(?:(?1))+#", "#aaaab# #aaaaab#" }, ++ { MU, A, 0, 0 | F_NOMATCH, "(?1)$((.|\\2xx){1,2})", "abc" }, + + /* 16 bit specific tests. */ + { CM, A, 0, 0 | F_FORCECONV, "\xc3\xa1", "\xc3\x81\xc3\xa1" }, diff --git a/patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch b/patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch new file mode 100644 index 0000000..9a9d020 --- /dev/null +++ b/patches/pcre2-10.43-Avoid-LIMIT_HEAP-integer.patch @@ -0,0 +1,137 @@ +From bfb55a6bd406ae711444915bba957b933aaa10ca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= +Date: Tue, 17 Jan 2023 06:55:53 -0800 +Subject: [PATCH 1/2] avoid LIMIT_HEAP integer multiplication wrap around + (#184) + +Cherry-picked from 4d66adc387baa2d29f91f0cadfaf8d8e77e13bb3. + +If a LIMIT_HEAP value once converted to bytes is larger than UINT_MAX +would result in a bogus setting that could trigger a matching failure +as shown by the following: + + PCRE2 version 10.42 2022-12-11 + re> /(*LIMIT_HEAP=4194304)a/ + data> a + Failed: error -63: heap limit exceeded + +Remove the multiplication and instead keep track of the maximum heap +allowed in KB as was done originally. + +Aditionally, add a check to avoid overflowing a PCRE2_SIZE while +doubling the heap used and that could result in a crash (only on +systems with a 32-bit PCRE2_SIZE and using non standard settings). + +Unlike the original, this code avoids rounding the heapframes_size +to the frame_size at the allocation time, which simplifies the logic +and wasn't really needed. + +Fixes: d90fb23 (Refactor match_data() to always use the heap instead + of having an initial frames vector on the stack..., 2022-07-27) +Closes: #183 +--- + src/pcre2_intmodedep.h | 4 ++-- + src/pcre2_match.c | 38 +++++++++++++++++++++++++++----------- + 2 files changed, 29 insertions(+), 13 deletions(-) + +diff --git a/src/pcre2_intmodedep.h b/src/pcre2_intmodedep.h +index 390e737a..8f6487e9 100644 +--- a/src/pcre2_intmodedep.h ++++ b/src/pcre2_intmodedep.h +@@ -858,7 +858,7 @@ doing traditional NFA matching (pcre2_match() and friends). */ + + typedef struct match_block { + pcre2_memctl memctl; /* For general use */ +- PCRE2_SIZE heap_limit; /* As it says */ ++ uint32_t heap_limit; /* As it says */ + uint32_t match_limit; /* As it says */ + uint32_t match_limit_depth; /* As it says */ + uint32_t match_call_count; /* Number of times a new frame is created */ +@@ -911,7 +911,7 @@ typedef struct dfa_match_block { + PCRE2_SPTR last_used_ptr; /* Latest consulted character */ + const uint8_t *tables; /* Character tables */ + PCRE2_SIZE start_offset; /* The start offset value */ +- PCRE2_SIZE heap_limit; /* As it says */ ++ uint32_t heap_limit; /* As it says */ + PCRE2_SIZE heap_used; /* As it says */ + uint32_t match_limit; /* As it says */ + uint32_t match_limit_depth; /* As it says */ +diff --git a/src/pcre2_match.c b/src/pcre2_match.c +index 168b9fad..fa49e64a 100644 +--- a/src/pcre2_match.c ++++ b/src/pcre2_match.c +@@ -665,13 +665,28 @@ N = (heapframe *)((char *)F + frame_size); + if (N >= frames_top) + { + heapframe *new; +- PCRE2_SIZE newsize = match_data->heapframes_size * 2; ++ PCRE2_SIZE newsize; + +- if (newsize > mb->heap_limit) ++ if (match_data->heapframes_size >= PCRE2_SIZE_MAX / 2) + { +- PCRE2_SIZE maxsize = (mb->heap_limit/frame_size) * frame_size; +- if (match_data->heapframes_size >= maxsize) return PCRE2_ERROR_HEAPLIMIT; +- newsize = maxsize; ++ if (match_data->heapframes_size == PCRE2_SIZE_MAX - 1) ++ return PCRE2_ERROR_NOMEMORY; ++ newsize = PCRE2_SIZE_MAX - 1; ++ } ++ else ++ newsize = match_data->heapframes_size * 2; ++ ++ if (newsize / 1024 >= mb->heap_limit) ++ { ++ PCRE2_SIZE old_size = match_data->heapframes_size / 1024; ++ if (mb->heap_limit <= old_size) return PCRE2_ERROR_HEAPLIMIT; ++ else ++ { ++ PCRE2_SIZE max_delta = 1024 * (mb->heap_limit - old_size); ++ int over_bytes = match_data->heapframes_size % 1024; ++ if (over_bytes) max_delta -= (1024 - over_bytes); ++ newsize = match_data->heapframes_size + max_delta; ++ } + } + + new = match_data->memctl.malloc(newsize, match_data->memctl.memory_data); +@@ -6801,7 +6816,7 @@ the pattern. It is not used at all if there are no capturing parentheses. + + frame_size is the total size of each frame + match_data->heapframes is the pointer to the frames vector +- match_data->heapframes_size is the total size of the vector ++ match_data->heapframes_size is the allocated size of the vector + + We must pad the frame_size for alignment to ensure subsequent frames are as + aligned as heapframe. Whilst ovector is word-aligned due to being a PCRE2_SIZE +@@ -6816,7 +6831,7 @@ frame_size = (offsetof(heapframe, ovector) + + smaller. */ + + mb->heap_limit = ((mcontext->heap_limit < re->limit_heap)? +- mcontext->heap_limit : re->limit_heap) * 1024; ++ mcontext->heap_limit : re->limit_heap); + + mb->match_limit = (mcontext->match_limit < re->limit_match)? + mcontext->match_limit : re->limit_match; +@@ -6832,14 +6847,15 @@ the size to a multiple of the frame size. */ + + heapframes_size = frame_size * 10; + if (heapframes_size < START_FRAMES_SIZE) heapframes_size = START_FRAMES_SIZE; +-if (heapframes_size > mb->heap_limit) ++if (heapframes_size / 1024 > mb->heap_limit) + { +- if (frame_size > mb->heap_limit ) return PCRE2_ERROR_HEAPLIMIT; +- heapframes_size = mb->heap_limit; ++ PCRE2_SIZE max_size = 1024 * mb->heap_limit; ++ if (max_size < frame_size) return PCRE2_ERROR_HEAPLIMIT; ++ heapframes_size = max_size; + } + + /* If an existing frame vector in the match_data block is large enough, we can +-use it.Otherwise, free any pre-existing vector and get a new one. */ ++use it. Otherwise, free any pre-existing vector and get a new one. */ + + if (match_data->heapframes_size < heapframes_size) + { +-- +2.51.2.vfs.0.0 + diff --git a/patches/pcre2-10.43-Fix-heapframe-overflow.patch b/patches/pcre2-10.43-Fix-heapframe-overflow.patch new file mode 100644 index 0000000..e5d5948 --- /dev/null +++ b/patches/pcre2-10.43-Fix-heapframe-overflow.patch @@ -0,0 +1,160 @@ +From ba0a3ff395d99ab2fe7ee76f96c97736294298c6 Mon Sep 17 00:00:00 2001 +From: Philip Hazel +Date: Fri, 18 Aug 2023 17:40:16 +0100 +Subject: [PATCH 2/2] Fix issue #275 + +Cherry-picked from 803a64f6151a2d43a44a2377956ae36408c96986. +--- + src/pcre2_match.c | 32 +++++++++++++++----------------- + testdata/testinput15 | 7 ++++++- + testdata/testoutput15 | 8 +++++++- + 3 files changed, 28 insertions(+), 19 deletions(-) + +diff --git a/src/pcre2_match.c b/src/pcre2_match.c +index fa49e64a..8d3c796e 100644 +--- a/src/pcre2_match.c ++++ b/src/pcre2_match.c +@@ -597,7 +597,6 @@ heapframe *P = NULL; + + heapframe *frames_top; /* End of frames vector */ + heapframe *assert_accept_frame = NULL; /* For passing back a frame with captures */ +-PCRE2_SIZE heapframes_size; /* Usable size of frames vector */ + PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ + + /* Local variables that do not need to be preserved over calls to RRMATCH(). */ +@@ -635,13 +634,10 @@ copied when a new frame is created. */ + + frame_copy_size = frame_size - offsetof(heapframe, eptr); + +-/* Set up the first frame and the end of the frames vector. We set the local +-heapframes_size to the usuable amount of the vector, that is, a whole number of +-frames. */ ++/* Set up the first frame and the end of the frames vector. */ + + F = match_data->heapframes; +-heapframes_size = (match_data->heapframes_size / frame_size) * frame_size; +-frames_top = (heapframe *)((char *)F + heapframes_size); ++frames_top = (heapframe *)((char *)F + match_data->heapframes_size); + + Frdepth = 0; /* "Recursion" depth */ + Fcapture_last = 0; /* Number of most recent capture */ +@@ -662,10 +658,11 @@ MATCH_RECURSE: + doubling the size, but constrained by the heap limit (which is in KiB). */ + + N = (heapframe *)((char *)F + frame_size); +-if (N >= frames_top) ++if ((heapframe *)((char *)N + frame_size) >= frames_top) + { + heapframe *new; + PCRE2_SIZE newsize; ++ PCRE2_SIZE usedsize = (char *)N - (char *)(match_data->heapframes); + + if (match_data->heapframes_size >= PCRE2_SIZE_MAX / 2) + { +@@ -679,7 +676,8 @@ if (N >= frames_top) + if (newsize / 1024 >= mb->heap_limit) + { + PCRE2_SIZE old_size = match_data->heapframes_size / 1024; +- if (mb->heap_limit <= old_size) return PCRE2_ERROR_HEAPLIMIT; ++ if (mb->heap_limit <= old_size) ++ return PCRE2_ERROR_HEAPLIMIT; + else + { + PCRE2_SIZE max_delta = 1024 * (mb->heap_limit - old_size); +@@ -689,19 +687,21 @@ if (N >= frames_top) + } + } + ++ /* With a heap limit set, the permitted additional size may not be enough for ++ another frame, so do a final check. */ ++ ++ if (newsize - usedsize < frame_size) return PCRE2_ERROR_HEAPLIMIT; + new = match_data->memctl.malloc(newsize, match_data->memctl.memory_data); + if (new == NULL) return PCRE2_ERROR_NOMEMORY; +- memcpy(new, match_data->heapframes, heapframes_size); ++ memcpy(new, match_data->heapframes, usedsize); + +- F = (heapframe *)((char *)new + ((char *)F - (char *)match_data->heapframes)); +- N = (heapframe *)((char *)F + frame_size); ++ N = (heapframe *)((char *)new + usedsize); ++ F = (heapframe *)((char *)N - frame_size); + + match_data->memctl.free(match_data->heapframes, match_data->memctl.memory_data); + match_data->heapframes = new; + match_data->heapframes_size = newsize; +- +- heapframes_size = (newsize / frame_size) * frame_size; +- frames_top = (heapframe *)((char *)new + heapframes_size); ++ frames_top = (heapframe *)((char *)new + newsize); + } + + #ifdef DEBUG_SHOW_RMATCH +@@ -6842,8 +6842,7 @@ mb->match_limit_depth = (mcontext->depth_limit < re->limit_depth)? + /* If a pattern has very many capturing parentheses, the frame size may be very + large. Set the initial frame vector size to ensure that there are at least 10 + available frames, but enforce a minimum of START_FRAMES_SIZE. If this is +-greater than the heap limit, get as large a vector as possible. Always round +-the size to a multiple of the frame size. */ ++greater than the heap limit, get as large a vector as possible. */ + + heapframes_size = frame_size * 10; + if (heapframes_size < START_FRAMES_SIZE) heapframes_size = START_FRAMES_SIZE; +@@ -7301,7 +7300,6 @@ for(;;) + mb->match_call_count = 0; + mb->end_offset_top = 0; + mb->skip_arg_count = 0; +- + rc = match(start_match, mb->start_code, re->top_bracket, frame_size, + match_data, mb); + +diff --git a/testdata/testinput15 b/testdata/testinput15 +index 22d739bc..61fff2cc 100644 +--- a/testdata/testinput15 ++++ b/testdata/testinput15 +@@ -6,12 +6,17 @@ + + # (2) Other tests that must not be run with JIT. + +-# This test is first so that it doesn't inherit a large enough heap frame ++# These tests are first so that they don't inherit a large enough heap frame + # vector from a previous test. + + /(*LIMIT_HEAP=21)\[(a)]{60}/expand + \[a]{60} + ++"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()" ++ xx ++ ++# ----------------------------------------------------------------------- ++ + /(a+)*zz/I + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits_noheap + aaaaaaaaaaaaaz\=find_limits_noheap +diff --git a/testdata/testoutput15 b/testdata/testoutput15 +index af0d7c2a..be7afd0f 100644 +--- a/testdata/testoutput15 ++++ b/testdata/testoutput15 +@@ -6,13 +6,19 @@ + + # (2) Other tests that must not be run with JIT. + +-# This test is first so that it doesn't inherit a large enough heap frame ++# These tests are first so that they don't inherit a large enough heap frame + # vector from a previous test. + + /(*LIMIT_HEAP=21)\[(a)]{60}/expand + \[a]{60} + Failed: error -63: heap limit exceeded + ++"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()" ++ xx ++Failed: error -63: heap limit exceeded ++ ++# ----------------------------------------------------------------------- ++ + /(a+)*zz/I + Capture group count = 1 + Starting code units: a z +-- +2.51.2.vfs.0.0 + diff --git a/patches/pcre2-10.44-Fix-incorrect-compiling.patch b/patches/pcre2-10.44-Fix-incorrect-compiling.patch new file mode 100644 index 0000000..6b951f9 --- /dev/null +++ b/patches/pcre2-10.44-Fix-incorrect-compiling.patch @@ -0,0 +1,64 @@ +From 0d7159ca52771daa8b5cafc422b6c140aa7a11d7 Mon Sep 17 00:00:00 2001 +From: Philip Hazel +Date: Fri, 1 Mar 2024 17:23:34 +0000 +Subject: [PATCH] Fix incorrect compiling when variable-length lookbehind's + first branch was not the shortest and there was a backreference to a + groupwithin the lookbehind. + +Cherry-picked from 4a6a8b056f39079d5e958eac84c2ad173f4680bc. +--- + src/pcre2_compile.c | 2 +- + testdata/testinput2 | 4 ++++ + testdata/testoutput2 | 10 ++++++++++ + 3 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index 8b364977..71c2dbca 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -9908,7 +9908,7 @@ do + *bptr |= branchlength; /* branchlength never more than 65535 */ + bptr = *pptrptr; + } +-while (*bptr == META_ALT); ++while (META_CODE(*bptr) == META_ALT); + + /* If any branch is of variable length, the whole lookbehind is of variable + length. If the maximum length of any branch exceeds the maximum for variable +diff --git a/testdata/testinput2 b/testdata/testinput2 +index 97608542..9b4c0684 100644 +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -6099,4 +6099,8 @@ a)"xI + /(a(?1)z||(?1)++)$/ + abcd\=disable_recurseloop_check + ++/(((?<=123?456456|ABC)))(?<=\2)../ ++ ABCDEFG ++ 12345645678910 ++ + # End of testinput2 +diff --git a/testdata/testoutput2 b/testdata/testoutput2 +index ee1f70b0..30c5a83e 100644 +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -18038,6 +18038,16 @@ Failed: error -47: match limit exceeded + 0: + 1: + ++/(((?<=123?456456|ABC)))(?<=\2)../ ++ ABCDEFG ++ 0: DE ++ 1: ++ 2: ++ 12345645678910 ++ 0: 78 ++ 1: ++ 2: ++ + # End of testinput2 + Error -70: PCRE2_ERROR_BADDATA (unknown error number) + Error -62: bad serialized data +-- +2.51.2.vfs.0.0 + diff --git a/patches/pcre2-10.44-Fix-locking-region.patch b/patches/pcre2-10.44-Fix-locking-region.patch new file mode 100644 index 0000000..39c1fb0 --- /dev/null +++ b/patches/pcre2-10.44-Fix-locking-region.patch @@ -0,0 +1,38 @@ +From c0fdb5f7013ecc10292ed9e697b3fe901e38cd77 Mon Sep 17 00:00:00 2001 +From: lbonn +Date: Tue, 2 Apr 2024 12:55:33 +0200 +Subject: [PATCH] Fix locking region in sjlit_malloc_exec + +Cherry-picked from ad89dd8ecd25589d236bd20b36f2abf69f938fd1 +(https://github.com/zherczeg/sljit.git) + +The locked section needs to extend until we are done modifying internal +block offsets and sizes, otherwise we risk running into data corruption +in a multi-threaded context. + +This bug was introduced in 7de0fee9a7376b33e31a3903487cd9933da3a606 +--- + src/sljit/allocator_src/sljitExecAllocatorCore.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sljit/allocator_src/sljitExecAllocatorCore.c b/src/sljit/allocator_src/sljitExecAllocatorCore.c +index 6cd39110..4ef39c17 100644 +--- a/src/sljit/allocator_src/sljitExecAllocatorCore.c ++++ b/src/sljit/allocator_src/sljitExecAllocatorCore.c +@@ -237,12 +237,12 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) + header->size = chunk_size; + next_header = AS_BLOCK_HEADER(header, chunk_size); + } +- SLJIT_ALLOCATOR_UNLOCK(); + next_header->size = 1; + next_header->prev_size = chunk_size; + #ifdef SLJIT_HAS_EXECUTABLE_OFFSET + next_header->executable_offset = executable_offset; + #endif /* SLJIT_HAS_EXECUTABLE_OFFSET */ ++ SLJIT_ALLOCATOR_UNLOCK(); + return MEM_START(header); + } + +-- +2.51.2.vfs.0.0 + diff --git a/patches/pcre2-10.45-Memory-reports-only-compiled.patch b/patches/pcre2-10.45-Memory-reports-only-compiled.patch new file mode 100644 index 0000000..9338088 --- /dev/null +++ b/patches/pcre2-10.45-Memory-reports-only-compiled.patch @@ -0,0 +1,5228 @@ +From e669b61ecf6ae3af2a4f0c714c6723ccc073ecd5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= +Date: Sun, 9 Jun 2024 08:22:15 -0700 +Subject: [PATCH] pcre2test: memory reports only compiled memory usage for + code/data (#418) + +Cherry-pick of 57906628d7babd27c01eb1c085d3e0cdd512189a. + +Since 05aafb2 (Implement pcre2_set_max_pattern_compiled_length() and set +this limit in the fuzzer, 2024-04-24), the memory modifier has reported +the full size of the allocated "code" returned by `pcre2_compile`. + +Problem is that the size of the structure used to hold that in memory also +depends on the platform ABI and even alignment by the compiler, and has +been therefore fragile to compare. + +Revert to reporting only the additional memory that `pcre2_compile()` will +use for the compiled pattern (including any data tables) and make sure +that the limit provided with `pcre2_set_max_pattern_compiled_length()` +also avoid the internal struct overhead. + +Fixes: #415 +--- + doc/pcre2_set_max_pattern_compiled_length.3 | 8 +- + src/pcre2_compile.c | 4 +- + src/pcre2test.c | 17 +- + testdata/testoutput8-16-2 | 171 +++++++------------- + testdata/testoutput8-16-3 | 171 +++++++------------- + testdata/testoutput8-16-4 | 171 +++++++------------- + testdata/testoutput8-32-2 | 171 +++++++------------- + testdata/testoutput8-32-3 | 171 +++++++------------- + testdata/testoutput8-32-4 | 171 +++++++------------- + testdata/testoutput8-8-2 | 171 +++++++------------- + testdata/testoutput8-8-3 | 171 +++++++------------- + testdata/testoutput8-8-4 | 171 +++++++------------- + 12 files changed, 546 insertions(+), 1022 deletions(-) + +diff --git a/doc/pcre2_set_max_pattern_compiled_length.3 b/doc/pcre2_set_max_pattern_compiled_length.3 +index 472a7bbd..679c12c2 100644 +--- a/doc/pcre2_set_max_pattern_compiled_length.3 ++++ b/doc/pcre2_set_max_pattern_compiled_length.3 +@@ -1,4 +1,4 @@ +-.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "24 April 2024" "PCRE2 10.44" ++.TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 "8 Jun 2024" "PCRE2 10.45" + .SH NAME + PCRE2 - Perl-compatible regular expressions (revised API) + .SH SYNOPSIS +@@ -15,9 +15,9 @@ PCRE2 - Perl-compatible regular expressions (revised API) + .rs + .sp + This function sets, in a compile context, the maximum size (in bytes) for the +-memory needed to hold the compiled version of a pattern that is compiled with +-this context. The result is always zero. If a pattern that is passed to +-\fBpcre2_compile()\fP with this context needs more memory, an error is ++memory needed to hold the compiled version of a pattern that is using this ++context. The result is always zero. If a pattern that is passed to ++\fBpcre2_compile()\fP referencing this context needs more memory, an error is + generated. The default is the largest number that a PCRE2_SIZE variable can + hold, which is effectively unlimited. + .P +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index 8e6787ab..cc5b9674 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -10608,8 +10608,7 @@ block for storing the compiled pattern and names table. Integer overflow should + no longer be possible because nowadays we limit the maximum value of + cb.names_found and cb.name_entry_size. */ + +-re_blocksize = sizeof(pcre2_real_code) + +- CU2BYTES(length + ++re_blocksize = CU2BYTES(length + + (PCRE2_SIZE)cb.names_found * (PCRE2_SIZE)cb.name_entry_size); + + if (re_blocksize > ccontext->max_pattern_compiled_length) +@@ -10618,6 +10617,7 @@ if (re_blocksize > ccontext->max_pattern_compiled_length) + goto HAD_CB_ERROR; + } + ++re_blocksize += sizeof(pcre2_real_code); + re = (pcre2_real_code *) + ccontext->memctl.malloc(re_blocksize, ccontext->memctl.memory_data); + if (re == NULL) +diff --git a/src/pcre2test.c b/src/pcre2test.c +index 37903451..550ae4e4 100644 +--- a/src/pcre2test.c ++++ b/src/pcre2test.c +@@ -4397,7 +4397,7 @@ static void + show_memory_info(void) + { + uint32_t name_count, name_entry_size; +-PCRE2_SIZE size, cblock_size; ++PCRE2_SIZE size, cblock_size, data_size; + + /* One of the test_mode values will always be true, but to stop a compiler + warning we must initialize cblock_size. */ +@@ -4417,18 +4417,19 @@ if (test_mode == PCRE32_MODE) cblock_size = sizeof(pcre2_real_code_32); + (void)pattern_info(PCRE2_INFO_NAMECOUNT, &name_count, FALSE); + (void)pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &name_entry_size, FALSE); + +-/* The uint32_t variables are cast before multiplying to stop code analyzers +-grumbling about potential overflow. */ ++/* The uint32_t variables are cast before multiplying to avoid potential ++ integer overflow. */ ++data_size = (PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size * (PCRE2_SIZE)code_unit_size; + +-fprintf(outfile, "Memory allocation - compiled block : %" SIZ_FORM "\n", size); +-fprintf(outfile, "Memory allocation - code portion : %" SIZ_FORM "\n", size - +- (PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size * (PCRE2_SIZE)code_unit_size - +- cblock_size); ++fprintf(outfile, "Memory allocation - code size : %" SIZ_FORM "\n", size - ++ cblock_size - data_size); ++if (data_size != 0) ++ fprintf(outfile, "Memory allocation - data size : %" SIZ_FORM "\n", data_size); + + if (pat_patctl.jit != 0) + { + (void)pattern_info(PCRE2_INFO_JITSIZE, &size, FALSE); +- fprintf(outfile, "Memory allocation - JIT code : %" SIZ_FORM "\n", size); ++ fprintf(outfile, "Memory allocation - JIT code : %" SIZ_FORM "\n", size); + } + } + +diff --git a/testdata/testoutput8-16-2 b/testdata/testoutput8-16-2 +index bcb9e177..108c0bea 100644 +--- a/testdata/testoutput8-16-2 ++++ b/testdata/testoutput8-16-2 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 5 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 174 +-Memory allocation - code portion : 38 ++Memory allocation - code size : 38 + ------------------------------------------------------------------ + 0 16 Bra + 2 7 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 38 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 172 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 + ------------------------------------------------------------------ + 0 15 Bra + 2 6 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 182 +-Memory allocation - code portion : 46 ++Memory allocation - code size : 46 + ------------------------------------------------------------------ + 0 20 Bra + 2 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 46 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 2 Bra + 2 2 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 7 Bra + 2 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 10 Bra + 2 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 26 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 278 +-Memory allocation - code portion : 142 ++Memory allocation - code size : 142 + ------------------------------------------------------------------ + 0 68 Bra + 2 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 142 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1784 +-Memory allocation - code portion : 1648 ++Memory allocation - code size : 1648 + ------------------------------------------------------------------ + 0 821 Bra + 2 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 1648 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1764 +-Memory allocation - code portion : 1628 ++Memory allocation - code size : 1628 + ------------------------------------------------------------------ + 0 811 Bra + 2 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 1628 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 13 Bra + 2 9 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 176 +-Memory allocation - code portion : 40 ++Memory allocation - code size : 40 + ------------------------------------------------------------------ + 0 17 Bra + 2 13 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 40 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 242 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 ++Memory allocation - data size : 52 + ------------------------------------------------------------------ + 0 24 Bra + 2 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 218 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 ++Memory allocation - data size : 18 + ------------------------------------------------------------------ + 0 29 Bra + 2 18 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 ++Memory allocation - data size : 6 + ------------------------------------------------------------------ + 0 24 Bra + 2 5 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 186 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 + ------------------------------------------------------------------ + 0 22 Bra + 2 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 214 +-Memory allocation - code portion : 78 ++Memory allocation - code size : 78 + ------------------------------------------------------------------ + 0 36 Bra + 2 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 78 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 5 Bra + 2 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 16 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 5 Bra + 2 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 16 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 5 Bra + 2 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 16 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 10 Bra + 2 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 158 +-Memory allocation - code portion : 22 ++Memory allocation - code size : 22 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 158 +-Memory allocation - code portion : 22 ++Memory allocation - code size : 22 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 190 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 + ------------------------------------------------------------------ + 0 24 Bra + 2 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 26 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 26 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 27 Bra + 2 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 194 +-Memory allocation - code portion : 58 ++Memory allocation - code size : 58 + ------------------------------------------------------------------ + 0 26 Bra + 2 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 58 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 13 Bra + 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 13 Bra + 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 23 Bra + 2 19 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 178 +-Memory allocation - code portion : 42 ++Memory allocation - code size : 42 + ------------------------------------------------------------------ + 0 18 Bra + 2 14 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 42 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +diff --git a/testdata/testoutput8-16-3 b/testdata/testoutput8-16-3 +index 4ec13ea9..28acd251 100644 +--- a/testdata/testoutput8-16-3 ++++ b/testdata/testoutput8-16-3 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 6 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 20 Bra + 3 8 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 182 +-Memory allocation - code portion : 46 ++Memory allocation - code size : 46 + ------------------------------------------------------------------ + 0 19 Bra + 3 7 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 46 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 186 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 + ------------------------------------------------------------------ + 0 21 Bra + 3 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 3 Bra + 3 3 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 8 Bra + 3 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 170 +-Memory allocation - code portion : 34 ++Memory allocation - code size : 34 + ------------------------------------------------------------------ + 0 13 Bra + 3 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 34 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 302 +-Memory allocation - code portion : 166 ++Memory allocation - code size : 166 + ------------------------------------------------------------------ + 0 79 Bra + 3 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 166 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1788 +-Memory allocation - code portion : 1652 ++Memory allocation - code size : 1652 + ------------------------------------------------------------------ + 0 822 Bra + 3 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 1652 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1768 +-Memory allocation - code portion : 1632 ++Memory allocation - code size : 1632 + ------------------------------------------------------------------ + 0 812 Bra + 3 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 1632 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 178 +-Memory allocation - code portion : 42 ++Memory allocation - code size : 42 + ------------------------------------------------------------------ + 0 17 Bra + 3 11 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 42 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 190 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 + ------------------------------------------------------------------ + 0 23 Bra + 3 17 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 68 ++Memory allocation - code size : 68 ++Memory allocation - data size : 52 + ------------------------------------------------------------------ + 0 30 Bra + 3 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 68 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 238 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 ++Memory allocation - data size : 18 + ------------------------------------------------------------------ + 0 38 Bra + 3 23 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 206 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 ++Memory allocation - data size : 6 + ------------------------------------------------------------------ + 0 28 Bra + 3 6 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 198 +-Memory allocation - code portion : 62 ++Memory allocation - code size : 62 + ------------------------------------------------------------------ + 0 27 Bra + 3 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 62 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 242 +-Memory allocation - code portion : 106 ++Memory allocation - code size : 106 + ------------------------------------------------------------------ + 0 49 Bra + 3 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 106 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 20 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 9 Bra + 3 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 9 Bra + 3 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 26 Bra + 3 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 32 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 202 +-Memory allocation - code portion : 66 ++Memory allocation - code size : 66 + ------------------------------------------------------------------ + 0 29 Bra + 3 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 66 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 + ------------------------------------------------------------------ + 0 28 Bra + 3 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 172 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 + ------------------------------------------------------------------ + 0 14 Bra + 3 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 172 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 + ------------------------------------------------------------------ + 0 14 Bra + 3 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 206 +-Memory allocation - code portion : 70 ++Memory allocation - code size : 70 + ------------------------------------------------------------------ + 0 31 Bra + 3 25 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 70 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 192 +-Memory allocation - code portion : 56 ++Memory allocation - code size : 56 + ------------------------------------------------------------------ + 0 24 Bra + 3 18 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 56 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^\x{aa}] +diff --git a/testdata/testoutput8-16-4 b/testdata/testoutput8-16-4 +index 4ec13ea9..28acd251 100644 +--- a/testdata/testoutput8-16-4 ++++ b/testdata/testoutput8-16-4 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 6 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 20 Bra + 3 8 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 182 +-Memory allocation - code portion : 46 ++Memory allocation - code size : 46 + ------------------------------------------------------------------ + 0 19 Bra + 3 7 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 46 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 186 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 + ------------------------------------------------------------------ + 0 21 Bra + 3 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 3 Bra + 3 3 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 8 Bra + 3 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 170 +-Memory allocation - code portion : 34 ++Memory allocation - code size : 34 + ------------------------------------------------------------------ + 0 13 Bra + 3 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 34 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 302 +-Memory allocation - code portion : 166 ++Memory allocation - code size : 166 + ------------------------------------------------------------------ + 0 79 Bra + 3 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 166 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1788 +-Memory allocation - code portion : 1652 ++Memory allocation - code size : 1652 + ------------------------------------------------------------------ + 0 822 Bra + 3 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 1652 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 1768 +-Memory allocation - code portion : 1632 ++Memory allocation - code size : 1632 + ------------------------------------------------------------------ + 0 812 Bra + 3 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 1632 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 178 +-Memory allocation - code portion : 42 ++Memory allocation - code size : 42 + ------------------------------------------------------------------ + 0 17 Bra + 3 11 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 42 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 190 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 + ------------------------------------------------------------------ + 0 23 Bra + 3 17 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 68 ++Memory allocation - code size : 68 ++Memory allocation - data size : 52 + ------------------------------------------------------------------ + 0 30 Bra + 3 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 68 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 238 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 ++Memory allocation - data size : 18 + ------------------------------------------------------------------ + 0 38 Bra + 3 23 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 206 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 ++Memory allocation - data size : 6 + ------------------------------------------------------------------ + 0 28 Bra + 3 6 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 198 +-Memory allocation - code portion : 62 ++Memory allocation - code size : 62 + ------------------------------------------------------------------ + 0 27 Bra + 3 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 62 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 242 +-Memory allocation - code portion : 106 ++Memory allocation - code size : 106 + ------------------------------------------------------------------ + 0 49 Bra + 3 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 106 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 20 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 9 Bra + 3 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 9 Bra + 3 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 26 Bra + 3 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 12 Bra + 3 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 32 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 202 +-Memory allocation - code portion : 66 ++Memory allocation - code size : 66 + ------------------------------------------------------------------ + 0 29 Bra + 3 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 66 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 + ------------------------------------------------------------------ + 0 28 Bra + 3 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 172 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 + ------------------------------------------------------------------ + 0 14 Bra + 3 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 172 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 + ------------------------------------------------------------------ + 0 14 Bra + 3 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 206 +-Memory allocation - code portion : 70 ++Memory allocation - code size : 70 + ------------------------------------------------------------------ + 0 31 Bra + 3 25 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 70 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 192 +-Memory allocation - code portion : 56 ++Memory allocation - code size : 56 + ------------------------------------------------------------------ + 0 24 Bra + 3 18 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 56 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^\x{aa}] +diff --git a/testdata/testoutput8-32-2 b/testdata/testoutput8-32-2 +index d76f3aaa..90ea536f 100644 +--- a/testdata/testoutput8-32-2 ++++ b/testdata/testoutput8-32-2 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 5 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 7 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 208 +-Memory allocation - code portion : 72 ++Memory allocation - code size : 72 + ------------------------------------------------------------------ + 0 15 Bra + 2 6 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 72 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 2 Bra + 2 2 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 176 +-Memory allocation - code portion : 40 ++Memory allocation - code size : 40 + ------------------------------------------------------------------ + 0 7 Bra + 2 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 40 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 356 +-Memory allocation - code portion : 220 ++Memory allocation - code size : 220 + ------------------------------------------------------------------ + 0 52 Bra + 2 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 220 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3432 +-Memory allocation - code portion : 3296 ++Memory allocation - code size : 3296 + ------------------------------------------------------------------ + 0 821 Bra + 2 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 3296 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3392 +-Memory allocation - code portion : 3256 ++Memory allocation - code size : 3256 + ------------------------------------------------------------------ + 0 811 Bra + 2 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 3256 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 + ------------------------------------------------------------------ + 0 13 Bra + 2 9 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 216 +-Memory allocation - code portion : 80 ++Memory allocation - code size : 80 + ------------------------------------------------------------------ + 0 17 Bra + 2 13 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 80 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 348 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 104 + ------------------------------------------------------------------ + 0 24 Bra + 2 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 300 +-Memory allocation - code portion : 128 ++Memory allocation - code size : 128 ++Memory allocation - data size : 36 + ------------------------------------------------------------------ + 0 29 Bra + 2 18 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 128 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 24 Bra + 2 5 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 236 +-Memory allocation - code portion : 100 ++Memory allocation - code size : 100 + ------------------------------------------------------------------ + 0 22 Bra + 2 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 100 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 292 +-Memory allocation - code portion : 156 ++Memory allocation - code size : 156 + ------------------------------------------------------------------ + 0 36 Bra + 2 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 156 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 28 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 52 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 224 +-Memory allocation - code portion : 88 ++Memory allocation - code size : 88 + ------------------------------------------------------------------ + 0 19 Bra + 2 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 88 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 240 +-Memory allocation - code portion : 104 ++Memory allocation - code size : 104 + ------------------------------------------------------------------ + 0 23 Bra + 2 19 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 104 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 14 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +diff --git a/testdata/testoutput8-32-3 b/testdata/testoutput8-32-3 +index d76f3aaa..90ea536f 100644 +--- a/testdata/testoutput8-32-3 ++++ b/testdata/testoutput8-32-3 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 5 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 7 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 208 +-Memory allocation - code portion : 72 ++Memory allocation - code size : 72 + ------------------------------------------------------------------ + 0 15 Bra + 2 6 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 72 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 2 Bra + 2 2 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 176 +-Memory allocation - code portion : 40 ++Memory allocation - code size : 40 + ------------------------------------------------------------------ + 0 7 Bra + 2 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 40 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 356 +-Memory allocation - code portion : 220 ++Memory allocation - code size : 220 + ------------------------------------------------------------------ + 0 52 Bra + 2 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 220 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3432 +-Memory allocation - code portion : 3296 ++Memory allocation - code size : 3296 + ------------------------------------------------------------------ + 0 821 Bra + 2 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 3296 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3392 +-Memory allocation - code portion : 3256 ++Memory allocation - code size : 3256 + ------------------------------------------------------------------ + 0 811 Bra + 2 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 3256 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 + ------------------------------------------------------------------ + 0 13 Bra + 2 9 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 216 +-Memory allocation - code portion : 80 ++Memory allocation - code size : 80 + ------------------------------------------------------------------ + 0 17 Bra + 2 13 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 80 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 348 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 104 + ------------------------------------------------------------------ + 0 24 Bra + 2 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 300 +-Memory allocation - code portion : 128 ++Memory allocation - code size : 128 ++Memory allocation - data size : 36 + ------------------------------------------------------------------ + 0 29 Bra + 2 18 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 128 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 24 Bra + 2 5 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 236 +-Memory allocation - code portion : 100 ++Memory allocation - code size : 100 + ------------------------------------------------------------------ + 0 22 Bra + 2 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 100 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 292 +-Memory allocation - code portion : 156 ++Memory allocation - code size : 156 + ------------------------------------------------------------------ + 0 36 Bra + 2 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 156 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 28 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 52 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 224 +-Memory allocation - code portion : 88 ++Memory allocation - code size : 88 + ------------------------------------------------------------------ + 0 19 Bra + 2 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 88 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 240 +-Memory allocation - code portion : 104 ++Memory allocation - code size : 104 + ------------------------------------------------------------------ + 0 23 Bra + 2 19 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 104 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 14 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +diff --git a/testdata/testoutput8-32-4 b/testdata/testoutput8-32-4 +index d76f3aaa..90ea536f 100644 +--- a/testdata/testoutput8-32-4 ++++ b/testdata/testoutput8-32-4 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 5 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 7 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 208 +-Memory allocation - code portion : 72 ++Memory allocation - code size : 72 + ------------------------------------------------------------------ + 0 15 Bra + 2 6 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 72 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 2 Bra + 2 2 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 176 +-Memory allocation - code portion : 40 ++Memory allocation - code size : 40 + ------------------------------------------------------------------ + 0 7 Bra + 2 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 40 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 356 +-Memory allocation - code portion : 220 ++Memory allocation - code size : 220 + ------------------------------------------------------------------ + 0 52 Bra + 2 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 220 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3432 +-Memory allocation - code portion : 3296 ++Memory allocation - code size : 3296 + ------------------------------------------------------------------ + 0 821 Bra + 2 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 3296 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 3392 +-Memory allocation - code portion : 3256 ++Memory allocation - code size : 3256 + ------------------------------------------------------------------ + 0 811 Bra + 2 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 3256 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 64 ++Memory allocation - code size : 64 + ------------------------------------------------------------------ + 0 13 Bra + 2 9 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 64 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 216 +-Memory allocation - code portion : 80 ++Memory allocation - code size : 80 + ------------------------------------------------------------------ + 0 17 Bra + 2 13 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 80 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 348 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 104 + ------------------------------------------------------------------ + 0 24 Bra + 2 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 300 +-Memory allocation - code portion : 128 ++Memory allocation - code size : 128 ++Memory allocation - data size : 36 + ------------------------------------------------------------------ + 0 29 Bra + 2 18 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 128 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 108 ++Memory allocation - code size : 108 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 24 Bra + 2 5 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 108 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 236 +-Memory allocation - code portion : 100 ++Memory allocation - code size : 100 + ------------------------------------------------------------------ + 0 22 Bra + 2 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 100 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 292 +-Memory allocation - code portion : 156 ++Memory allocation - code size : 156 + ------------------------------------------------------------------ + 0 36 Bra + 2 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 156 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 28 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \x{c5b4} + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 8 Bra + 2 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x{8a9e} + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 212 +-Memory allocation - code portion : 76 ++Memory allocation - code size : 76 + ------------------------------------------------------------------ + 0 16 Bra + 2 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 76 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 52 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 188 +-Memory allocation - code portion : 52 ++Memory allocation - code size : 52 + ------------------------------------------------------------------ + 0 10 Bra + 2 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 52 + Failed: error 106 at offset 13: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 224 +-Memory allocation - code portion : 88 ++Memory allocation - code size : 88 + ------------------------------------------------------------------ + 0 19 Bra + 2 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 88 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 196 +-Memory allocation - code portion : 60 ++Memory allocation - code size : 60 + ------------------------------------------------------------------ + 0 12 Bra + 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 60 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 9 Bra + 2 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 240 +-Memory allocation - code portion : 104 ++Memory allocation - code size : 104 + ------------------------------------------------------------------ + 0 23 Bra + 2 19 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 104 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 220 +-Memory allocation - code portion : 84 ++Memory allocation - code size : 84 + ------------------------------------------------------------------ + 0 18 Bra + 2 14 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 84 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 4 Bra + 2 [^\x{aa}] +diff --git a/testdata/testoutput8-8-2 b/testdata/testoutput8-8-2 +index f3811d95..779552ac 100644 +--- a/testdata/testoutput8-8-2 ++++ b/testdata/testoutput8-8-2 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 153 +-Memory allocation - code portion : 17 ++Memory allocation - code size : 17 + ------------------------------------------------------------------ + 0 13 Bra + 3 7 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 17 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 161 +-Memory allocation - code portion : 25 ++Memory allocation - code size : 25 + ------------------------------------------------------------------ + 0 21 Bra + 3 9 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 25 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 159 +-Memory allocation - code portion : 23 ++Memory allocation - code size : 23 + ------------------------------------------------------------------ + 0 19 Bra + 3 7 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 23 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 177 +-Memory allocation - code portion : 41 ++Memory allocation - code size : 41 + ------------------------------------------------------------------ + 0 37 Bra + 3 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 41 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 143 +-Memory allocation - code portion : 7 ++Memory allocation - code size : 7 + ------------------------------------------------------------------ + 0 3 Bra + 3 3 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 9 Bra + 3 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 14 Bra + 3 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 256 +-Memory allocation - code portion : 120 ++Memory allocation - code size : 120 + ------------------------------------------------------------------ + 0 116 Bra + 3 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 120 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 962 +-Memory allocation - code portion : 826 ++Memory allocation - code size : 826 + ------------------------------------------------------------------ + 0 822 Bra + 3 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 826 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 952 +-Memory allocation - code portion : 816 ++Memory allocation - code size : 816 + ------------------------------------------------------------------ + 0 812 Bra + 3 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 816 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 158 +-Memory allocation - code portion : 22 ++Memory allocation - code size : 22 + ------------------------------------------------------------------ + 0 18 Bra + 3 12 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 22 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 24 Bra + 3 18 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 200 +-Memory allocation - code portion : 36 ++Memory allocation - code size : 36 ++Memory allocation - data size : 28 + ------------------------------------------------------------------ + 0 32 Bra + 3 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 36 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 193 +-Memory allocation - code portion : 45 ++Memory allocation - code size : 45 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 41 Bra + 3 25 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 45 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 174 +-Memory allocation - code portion : 34 ++Memory allocation - code size : 34 ++Memory allocation - data size : 4 + ------------------------------------------------------------------ + 0 30 Bra + 3 7 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 34 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 167 +-Memory allocation - code portion : 31 ++Memory allocation - code size : 31 + ------------------------------------------------------------------ + 0 27 Bra + 3 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 31 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 189 +-Memory allocation - code portion : 53 ++Memory allocation - code size : 53 + ------------------------------------------------------------------ + 0 49 Bra + 3 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 53 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 7 Bra + 3 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 8 Bra + 3 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 8 Bra + 3 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 8 Bra + 3 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 12 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 14 Bra + 3 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 155 +-Memory allocation - code portion : 19 ++Memory allocation - code size : 19 + ------------------------------------------------------------------ + 0 15 Bra + 3 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \xb4 + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 155 +-Memory allocation - code portion : 19 ++Memory allocation - code size : 19 + ------------------------------------------------------------------ + 0 15 Bra + 3 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x9e + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 183 +-Memory allocation - code portion : 47 ++Memory allocation - code size : 47 + ------------------------------------------------------------------ + 0 43 Bra + 3 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 47 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 14 Bra + 3 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 14 Bra + 3 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 18 + Failed: error 106 at offset 15: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 186 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 + ------------------------------------------------------------------ + 0 46 Bra + 3 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 11 Bra + 3 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 48 ++Memory allocation - code size : 48 + ------------------------------------------------------------------ + 0 44 Bra + 3 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 48 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 161 +-Memory allocation - code portion : 25 ++Memory allocation - code size : 25 + ------------------------------------------------------------------ + 0 21 Bra + 3 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 25 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 161 +-Memory allocation - code portion : 25 ++Memory allocation - code size : 25 + ------------------------------------------------------------------ + 0 21 Bra + 3 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 25 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 153 +-Memory allocation - code portion : 17 ++Memory allocation - code size : 17 + ------------------------------------------------------------------ + 0 13 Bra + 3 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 17 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 174 +-Memory allocation - code portion : 38 ++Memory allocation - code size : 38 + ------------------------------------------------------------------ + 0 34 Bra + 3 28 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 38 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 26 Bra + 3 20 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 10 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 5 Bra + 3 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 9 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 146 +-Memory allocation - code portion : 10 ++Memory allocation - code size : 10 + ------------------------------------------------------------------ + 0 6 Bra + 3 [^\x{aa}] +diff --git a/testdata/testoutput8-8-3 b/testdata/testoutput8-8-3 +index 48e0b8aa..2657ce89 100644 +--- a/testdata/testoutput8-8-3 ++++ b/testdata/testoutput8-8-3 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 16 Bra + 4 8 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 166 +-Memory allocation - code portion : 30 ++Memory allocation - code size : 30 + ------------------------------------------------------------------ + 0 25 Bra + 4 10 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 30 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 164 +-Memory allocation - code portion : 28 ++Memory allocation - code size : 28 + ------------------------------------------------------------------ + 0 23 Bra + 4 8 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 28 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 179 +-Memory allocation - code portion : 43 ++Memory allocation - code size : 43 + ------------------------------------------------------------------ + 0 38 Bra + 4 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 43 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 145 +-Memory allocation - code portion : 9 ++Memory allocation - code size : 9 + ------------------------------------------------------------------ + 0 4 Bra + 4 4 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 10 Bra + 4 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 158 +-Memory allocation - code portion : 22 ++Memory allocation - code size : 22 + ------------------------------------------------------------------ + 0 17 Bra + 4 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 22 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 268 +-Memory allocation - code portion : 132 ++Memory allocation - code size : 132 + ------------------------------------------------------------------ + 0 127 Bra + 4 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 132 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 964 +-Memory allocation - code portion : 828 ++Memory allocation - code size : 828 + ------------------------------------------------------------------ + 0 823 Bra + 4 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 828 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 954 +-Memory allocation - code portion : 818 ++Memory allocation - code size : 818 + ------------------------------------------------------------------ + 0 813 Bra + 4 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 818 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 163 +-Memory allocation - code portion : 27 ++Memory allocation - code size : 27 + ------------------------------------------------------------------ + 0 22 Bra + 4 14 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 27 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 171 +-Memory allocation - code portion : 35 ++Memory allocation - code size : 35 + ------------------------------------------------------------------ + 0 30 Bra + 4 22 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 35 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 207 +-Memory allocation - code portion : 43 ++Memory allocation - code size : 43 ++Memory allocation - data size : 28 + ------------------------------------------------------------------ + 0 38 Bra + 4 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 43 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 203 +-Memory allocation - code portion : 55 ++Memory allocation - code size : 55 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 50 Bra + 4 30 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 55 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 179 +-Memory allocation - code portion : 39 ++Memory allocation - code size : 39 ++Memory allocation - data size : 4 + ------------------------------------------------------------------ + 0 34 Bra + 4 8 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 39 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 173 +-Memory allocation - code portion : 37 ++Memory allocation - code size : 37 + ------------------------------------------------------------------ + 0 32 Bra + 4 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 37 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 203 +-Memory allocation - code portion : 67 ++Memory allocation - code size : 67 + ------------------------------------------------------------------ + 0 62 Bra + 4 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 67 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 8 Bra + 4 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 9 Bra + 4 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 9 Bra + 4 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 9 Bra + 4 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 14 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 15 Bra + 4 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 16 Bra + 4 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \xb4 + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 16 Bra + 4 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x9e + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 186 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 + ------------------------------------------------------------------ + 0 45 Bra + 4 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 16 Bra + 4 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 16 Bra + 4 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 21 + Failed: error 106 at offset 15: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 13 Bra + 4 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 13 Bra + 4 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 13 Bra + 4 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 13 Bra + 4 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 189 +-Memory allocation - code portion : 53 ++Memory allocation - code size : 53 + ------------------------------------------------------------------ + 0 48 Bra + 4 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 53 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 154 +-Memory allocation - code portion : 18 ++Memory allocation - code size : 18 + ------------------------------------------------------------------ + 0 13 Bra + 4 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 18 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 187 +-Memory allocation - code portion : 51 ++Memory allocation - code size : 51 + ------------------------------------------------------------------ + 0 46 Bra + 4 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 51 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 163 +-Memory allocation - code portion : 27 ++Memory allocation - code size : 27 + ------------------------------------------------------------------ + 0 22 Bra + 4 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 27 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 163 +-Memory allocation - code portion : 27 ++Memory allocation - code size : 27 + ------------------------------------------------------------------ + 0 22 Bra + 4 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 27 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 156 +-Memory allocation - code portion : 20 ++Memory allocation - code size : 20 + ------------------------------------------------------------------ + 0 15 Bra + 4 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 20 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 183 +-Memory allocation - code portion : 47 ++Memory allocation - code size : 47 + ------------------------------------------------------------------ + 0 42 Bra + 4 34 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 47 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 173 +-Memory allocation - code portion : 37 ++Memory allocation - code size : 37 + ------------------------------------------------------------------ + 0 32 Bra + 4 24 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 37 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 12 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 6 Bra + 4 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 11 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 148 +-Memory allocation - code portion : 12 ++Memory allocation - code size : 12 + ------------------------------------------------------------------ + 0 7 Bra + 4 [^\x{aa}] +diff --git a/testdata/testoutput8-8-4 b/testdata/testoutput8-8-4 +index 81cf0f76..8bfac41a 100644 +--- a/testdata/testoutput8-8-4 ++++ b/testdata/testoutput8-8-4 +@@ -10,8 +10,7 @@ + #pattern fullbincode,memory + + /((?i)b)/ +-Memory allocation - compiled block : 161 +-Memory allocation - code portion : 25 ++Memory allocation - code size : 25 + ------------------------------------------------------------------ + 0 19 Bra + 5 9 CBra 1 +@@ -22,8 +21,7 @@ Memory allocation - code portion : 25 + ------------------------------------------------------------------ + + /(?s)(.*X|^B)/ +-Memory allocation - compiled block : 171 +-Memory allocation - code portion : 35 ++Memory allocation - code size : 35 + ------------------------------------------------------------------ + 0 29 Bra + 5 11 CBra 1 +@@ -38,8 +36,7 @@ Memory allocation - code portion : 35 + ------------------------------------------------------------------ + + /(?s:.*X|^B)/ +-Memory allocation - compiled block : 169 +-Memory allocation - code portion : 33 ++Memory allocation - code size : 33 + ------------------------------------------------------------------ + 0 27 Bra + 5 9 Bra +@@ -54,8 +51,7 @@ Memory allocation - code portion : 33 + ------------------------------------------------------------------ + + /^[[:alnum:]]/ +-Memory allocation - compiled block : 181 +-Memory allocation - code portion : 45 ++Memory allocation - code size : 45 + ------------------------------------------------------------------ + 0 39 Bra + 5 ^ +@@ -65,8 +61,7 @@ Memory allocation - code portion : 45 + ------------------------------------------------------------------ + + /#/Ix +-Memory allocation - compiled block : 147 +-Memory allocation - code portion : 11 ++Memory allocation - code size : 11 + ------------------------------------------------------------------ + 0 5 Bra + 5 5 Ket +@@ -78,8 +73,7 @@ Options: extended + Subject length lower bound = 0 + + /a#/Ix +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 a +@@ -92,8 +86,7 @@ First code unit = 'a' + Subject length lower bound = 1 + + /x?+/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 x?+ +@@ -102,8 +95,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /x++/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 x++ +@@ -112,8 +104,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /x{1,3}+/ +-Memory allocation - compiled block : 153 +-Memory allocation - code portion : 17 ++Memory allocation - code size : 17 + ------------------------------------------------------------------ + 0 11 Bra + 5 x +@@ -123,8 +114,7 @@ Memory allocation - code portion : 17 + ------------------------------------------------------------------ + + /(x)*+/ +-Memory allocation - compiled block : 162 +-Memory allocation - code portion : 26 ++Memory allocation - code size : 26 + ------------------------------------------------------------------ + 0 20 Bra + 5 Braposzero +@@ -136,8 +126,7 @@ Memory allocation - code portion : 26 + ------------------------------------------------------------------ + + /^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/ +-Memory allocation - compiled block : 280 +-Memory allocation - code portion : 144 ++Memory allocation - code size : 144 + ------------------------------------------------------------------ + 0 138 Bra + 5 ^ +@@ -160,8 +149,7 @@ Memory allocation - code portion : 144 + ------------------------------------------------------------------ + + "8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 966 +-Memory allocation - code portion : 830 ++Memory allocation - code size : 830 + ------------------------------------------------------------------ + 0 824 Bra + 5 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -171,8 +159,7 @@ Memory allocation - code portion : 830 + ------------------------------------------------------------------ + + "\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b" +-Memory allocation - compiled block : 956 +-Memory allocation - code portion : 820 ++Memory allocation - code size : 820 + ------------------------------------------------------------------ + 0 814 Bra + 5 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDDqmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X +@@ -182,8 +169,7 @@ Memory allocation - code portion : 820 + ------------------------------------------------------------------ + + /(a(?1)b)/ +-Memory allocation - compiled block : 168 +-Memory allocation - code portion : 32 ++Memory allocation - code size : 32 + ------------------------------------------------------------------ + 0 26 Bra + 5 16 CBra 1 +@@ -196,8 +182,7 @@ Memory allocation - code portion : 32 + ------------------------------------------------------------------ + + /(a(?1)+b)/ +-Memory allocation - compiled block : 178 +-Memory allocation - code portion : 42 ++Memory allocation - code size : 42 + ------------------------------------------------------------------ + 0 36 Bra + 5 26 CBra 1 +@@ -212,8 +197,8 @@ Memory allocation - code portion : 42 + ------------------------------------------------------------------ + + /a(?Pb|c)d(?Pe)/ +-Memory allocation - compiled block : 214 +-Memory allocation - code portion : 50 ++Memory allocation - code size : 50 ++Memory allocation - data size : 28 + ------------------------------------------------------------------ + 0 44 Bra + 5 a +@@ -231,8 +216,8 @@ Memory allocation - code portion : 50 + ------------------------------------------------------------------ + + /(?:a(?Pc(?Pd)))(?Pa)/ +-Memory allocation - compiled block : 213 +-Memory allocation - code portion : 65 ++Memory allocation - code size : 65 ++Memory allocation - data size : 12 + ------------------------------------------------------------------ + 0 59 Bra + 5 35 Bra +@@ -252,8 +237,8 @@ Memory allocation - code portion : 65 + ------------------------------------------------------------------ + + /(?Pa)...(?P=a)bbb(?P>a)d/ +-Memory allocation - compiled block : 184 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 ++Memory allocation - data size : 4 + ------------------------------------------------------------------ + 0 38 Bra + 5 9 CBra 1 +@@ -271,8 +256,7 @@ Memory allocation - code portion : 44 + ------------------------------------------------------------------ + + /abc(?C255)de(?C)f/ +-Memory allocation - compiled block : 179 +-Memory allocation - code portion : 43 ++Memory allocation - code size : 43 + ------------------------------------------------------------------ + 0 37 Bra + 5 abc +@@ -285,8 +269,7 @@ Memory allocation - code portion : 43 + ------------------------------------------------------------------ + + /abcde/auto_callout +-Memory allocation - compiled block : 217 +-Memory allocation - code portion : 81 ++Memory allocation - code size : 81 + ------------------------------------------------------------------ + 0 75 Bra + 5 Callout 255 0 1 +@@ -305,8 +288,7 @@ Memory allocation - code portion : 81 + ------------------------------------------------------------------ + + /\x{100}/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{100} +@@ -315,8 +297,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{1000}/utf +-Memory allocation - compiled block : 151 +-Memory allocation - code portion : 15 ++Memory allocation - code size : 15 + ------------------------------------------------------------------ + 0 9 Bra + 5 \x{1000} +@@ -325,8 +306,7 @@ Memory allocation - code portion : 15 + ------------------------------------------------------------------ + + /\x{10000}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 10 Bra + 5 \x{10000} +@@ -335,8 +315,7 @@ Memory allocation - code portion : 16 + ------------------------------------------------------------------ + + /\x{100000}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 10 Bra + 5 \x{100000} +@@ -345,8 +324,7 @@ Memory allocation - code portion : 16 + ------------------------------------------------------------------ + + /\x{10ffff}/utf +-Memory allocation - compiled block : 152 +-Memory allocation - code portion : 16 ++Memory allocation - code size : 16 + ------------------------------------------------------------------ + 0 10 Bra + 5 \x{10ffff} +@@ -358,8 +336,7 @@ Memory allocation - code portion : 16 + Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large + + /[\x{ff}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{ff} +@@ -368,8 +345,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[\x{100}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{100} +@@ -378,8 +354,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x80/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{80} +@@ -388,8 +363,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\xff/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{ff} +@@ -398,8 +372,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /\x{0041}\x{2262}\x{0391}\x{002e}/I,utf +-Memory allocation - compiled block : 158 +-Memory allocation - code portion : 22 ++Memory allocation - code size : 22 + ------------------------------------------------------------------ + 0 16 Bra + 5 A\x{2262}\x{391}. +@@ -413,8 +386,7 @@ Last code unit = '.' + Subject length lower bound = 4 + + /\x{D55c}\x{ad6d}\x{C5B4}/I,utf +-Memory allocation - compiled block : 159 +-Memory allocation - code portion : 23 ++Memory allocation - code size : 23 + ------------------------------------------------------------------ + 0 17 Bra + 5 \x{d55c}\x{ad6d}\x{c5b4} +@@ -428,8 +400,7 @@ Last code unit = \xb4 + Subject length lower bound = 3 + + /\x{65e5}\x{672c}\x{8a9e}/I,utf +-Memory allocation - compiled block : 159 +-Memory allocation - code portion : 23 ++Memory allocation - code size : 23 + ------------------------------------------------------------------ + 0 17 Bra + 5 \x{65e5}\x{672c}\x{8a9e} +@@ -443,8 +414,7 @@ Last code unit = \x9e + Subject length lower bound = 3 + + /[\x{100}]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{100} +@@ -453,8 +423,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[Z\x{100}]/utf +-Memory allocation - compiled block : 189 +-Memory allocation - code portion : 53 ++Memory allocation - code size : 53 + ------------------------------------------------------------------ + 0 47 Bra + 5 [Z\x{100}] +@@ -463,8 +432,7 @@ Memory allocation - code portion : 53 + ------------------------------------------------------------------ + + /^[\x{100}\E-\Q\E\x{150}]/utf +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 18 Bra + 5 ^ +@@ -474,8 +442,7 @@ Memory allocation - code portion : 24 + ------------------------------------------------------------------ + + /^[\QĀ\E-\QŐ\E]/utf +-Memory allocation - compiled block : 160 +-Memory allocation - code portion : 24 ++Memory allocation - code size : 24 + ------------------------------------------------------------------ + 0 18 Bra + 5 ^ +@@ -488,8 +455,7 @@ Memory allocation - code portion : 24 + Failed: error 106 at offset 15: missing terminating ] for character class + + /[\p{L}]/ +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 15 Bra + 5 [\p{L}] +@@ -498,8 +464,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /[\p{^L}]/ +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 15 Bra + 5 [\P{L}] +@@ -508,8 +473,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /[\P{L}]/ +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 15 Bra + 5 [\P{L}] +@@ -518,8 +482,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /[\P{^L}]/ +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 15 Bra + 5 [\p{L}] +@@ -528,8 +491,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /[abc\p{L}\x{0660}]/utf +-Memory allocation - compiled block : 192 +-Memory allocation - code portion : 56 ++Memory allocation - code size : 56 + ------------------------------------------------------------------ + 0 50 Bra + 5 [a-c\p{L}\x{660}] +@@ -538,8 +500,7 @@ Memory allocation - code portion : 56 + ------------------------------------------------------------------ + + /[\p{Nd}]/utf +-Memory allocation - compiled block : 157 +-Memory allocation - code portion : 21 ++Memory allocation - code size : 21 + ------------------------------------------------------------------ + 0 15 Bra + 5 [\p{Nd}] +@@ -548,8 +509,7 @@ Memory allocation - code portion : 21 + ------------------------------------------------------------------ + + /[\p{Nd}+-]+/utf +-Memory allocation - compiled block : 190 +-Memory allocation - code portion : 54 ++Memory allocation - code size : 54 + ------------------------------------------------------------------ + 0 48 Bra + 5 [+\-\p{Nd}]++ +@@ -558,8 +518,7 @@ Memory allocation - code portion : 54 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf +-Memory allocation - compiled block : 165 +-Memory allocation - code portion : 29 ++Memory allocation - code size : 29 + ------------------------------------------------------------------ + 0 23 Bra + 5 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -568,8 +527,7 @@ Memory allocation - code portion : 29 + ------------------------------------------------------------------ + + /A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf +-Memory allocation - compiled block : 165 +-Memory allocation - code portion : 29 ++Memory allocation - code size : 29 + ------------------------------------------------------------------ + 0 23 Bra + 5 A\x{391}\x{10427}\x{ff3a}\x{1fb0} +@@ -578,8 +536,7 @@ Memory allocation - code portion : 29 + ------------------------------------------------------------------ + + /[\x{105}-\x{109}]/i,utf +-Memory allocation - compiled block : 159 +-Memory allocation - code portion : 23 ++Memory allocation - code size : 23 + ------------------------------------------------------------------ + 0 17 Bra + 5 [\x{104}-\x{109}] +@@ -588,8 +545,7 @@ Memory allocation - code portion : 23 + ------------------------------------------------------------------ + + /( ( (?(1)0|) )* )/x +-Memory allocation - compiled block : 192 +-Memory allocation - code portion : 56 ++Memory allocation - code size : 56 + ------------------------------------------------------------------ + 0 50 Bra + 5 40 CBra 1 +@@ -607,8 +563,7 @@ Memory allocation - code portion : 56 + ------------------------------------------------------------------ + + /( (?(1)0|)* )/x +-Memory allocation - compiled block : 180 +-Memory allocation - code portion : 44 ++Memory allocation - code size : 44 + ------------------------------------------------------------------ + 0 38 Bra + 5 28 CBra 1 +@@ -624,8 +579,7 @@ Memory allocation - code portion : 44 + ------------------------------------------------------------------ + + /[a]/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 a +@@ -634,8 +588,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[a]/utf +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 a +@@ -644,8 +597,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[\xaa]/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 \x{aa} +@@ -654,8 +606,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[\xaa]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 \x{aa} +@@ -664,8 +615,7 @@ Memory allocation - code portion : 14 + ------------------------------------------------------------------ + + /[^a]/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 [^a] +@@ -674,8 +624,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[^a]/utf +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 [^a] +@@ -684,8 +633,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[^\xaa]/ +-Memory allocation - compiled block : 149 +-Memory allocation - code portion : 13 ++Memory allocation - code size : 13 + ------------------------------------------------------------------ + 0 7 Bra + 5 [^\x{aa}] +@@ -694,8 +642,7 @@ Memory allocation - code portion : 13 + ------------------------------------------------------------------ + + /[^\xaa]/utf +-Memory allocation - compiled block : 150 +-Memory allocation - code portion : 14 ++Memory allocation - code size : 14 + ------------------------------------------------------------------ + 0 8 Bra + 5 [^\x{aa}] +-- +2.51.2.vfs.0.0 + diff --git a/patches/pcre2-10.47-Fix-for-callback.patch b/patches/pcre2-10.47-Fix-for-callback.patch new file mode 100644 index 0000000..7ec98fe --- /dev/null +++ b/patches/pcre2-10.47-Fix-for-callback.patch @@ -0,0 +1,177 @@ +From 39c3fd67ef9ca22c39f128bf476e238b0e886975 Mon Sep 17 00:00:00 2001 +From: Nicholas Wilson +Date: Fri, 26 Sep 2025 11:37:10 +0100 +Subject: [PATCH] Add fix and tests for callback enumerate (#801) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Cherry-pick of commit cc6c84d0207d9d09ca9e42996f0bc50353c03157. + +This is a bug in PCRE2 10.45 and 10.46, not present in 10.44 and earlier. + +The bug is that applications using pcre2_callout_enumerate() will crash badly on patterns with Unicode (ie non-ASCII) character classes. There is an out-of-bounds read of arbitrary length, including misinterpreting the bytes as offsets, allowing the read to jump forwards in memory to pretty much anywhere. + +Applications which call pcre2_callout_enumerate should potentially downgrade to PCRE2 10.44 until we release an update of PCRE2 with the fix. + +Since this function is (clearly!!) not used often by applications, I am not currently treating this as very high severity. There is no way for an attacker to make any application call this function, if it is not currently using it. + +The root cause seems to be commit 24f9d8d (#540). + +--------- + +Co-authored-by: Carlo Marcelo Arenas Belón +--- + src/pcre2_pattern_info.c | 3 +- + src/pcre2test.c | 61 ++++++++++++++++++++++------------------ + 2 files changed, 34 insertions(+), 30 deletions(-) + +diff --git a/src/pcre2_pattern_info.c b/src/pcre2_pattern_info.c +index fe4d3c66..c49eaf69 100644 +--- a/src/pcre2_pattern_info.c ++++ b/src/pcre2_pattern_info.c +@@ -292,8 +292,7 @@ if (re->magic_number != MAGIC_NUMBER) return PCRE2_ERROR_BADMAGIC; + if ((re->flags & (PCRE2_CODE_UNIT_WIDTH/8)) == 0) return PCRE2_ERROR_BADMODE; + + cb.version = 0; +-cc = (PCRE2_SPTR)((const uint8_t *)re + sizeof(pcre2_real_code)) +- + re->name_count * re->name_entry_size; ++cc = (PCRE2_SPTR)((uint8_t *)re + re->code_start); + + while (TRUE) + { +diff --git a/src/pcre2test.c b/src/pcre2test.c +index 80ab4f80..6ac638ce 100644 +--- a/src/pcre2test.c ++++ b/src/pcre2test.c +@@ -512,7 +512,6 @@ so many of them that they are split into two fields. */ + /* Combinations */ + + #define CTL_DEBUG (CTL_FULLBINCODE|CTL_INFO) /* For setting */ +-#define CTL_ANYINFO (CTL_DEBUG|CTL_BINCODE|CTL_CALLOUT_INFO) + #define CTL_ANYGLOB (CTL_ALTGLOBAL|CTL_GLOBAL) + + /* Second control word */ +@@ -4652,6 +4651,16 @@ fprintf(outfile, "%.*s\n", + return 0; + } + ++/* Backport from 10.47 */ ++ ++static int callout_enumerate_function_void(pcre2_callout_enumerate_block_8 *cb, ++ void *callout_data) ++{ ++(void)cb; ++(void)callout_data; ++return 0; ++} ++ + + + /************************************************* +@@ -4671,9 +4680,16 @@ Returns: PR_OK continue processing next line + static int + show_pattern_info(void) + { ++int rc; + uint32_t compile_options, overall_options, extra_options; + BOOL utf = (FLD(compiled_code, overall_options) & PCRE2_UTF) != 0; + ++if ((pat_patctl.control & CTL_MEMORY) != 0) ++ show_memory_info(); ++ ++if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) ++ show_framesize(); ++ + if ((pat_patctl.control & (CTL_BINCODE|CTL_FULLBINCODE)) != 0) + { + fprintf(outfile, "------------------------------------------------------------------\n"); +@@ -5016,17 +5032,17 @@ if ((pat_patctl.control & CTL_INFO) != 0) + } + } + +-if ((pat_patctl.control & CTL_CALLOUT_INFO) != 0) ++PCRE2_CALLOUT_ENUMERATE(rc, ++ (((pat_patctl.control & CTL_CALLOUT_INFO) != 0)? callout_callback : ++ /* Exercise the callout enumeration code with a dummy callback to make sure ++ it works. */ ++ callout_enumerate_function_void), 0); ++if (rc != 0) + { +- int errorcode; +- PCRE2_CALLOUT_ENUMERATE(errorcode, callout_callback, 0); +- if (errorcode != 0) +- { +- fprintf(outfile, "Callout enumerate failed: error %d: ", errorcode); +- if (errorcode < 0 && !print_error_message(errorcode, "", "\n")) +- return PR_ABEND; +- return PR_SKIP; +- } ++ fprintf(outfile, "Callout enumerate failed: error %d: ", rc); ++ if (rc < 0 && !print_error_message(rc, "", "\n")) ++ return PR_ABEND; ++ return PR_SKIP; + } + + return PR_OK; +@@ -5230,13 +5246,9 @@ switch(cmd) + { + PCRE2_JIT_COMPILE(jitrc, compiled_code, pat_patctl.jit); + } +- if ((pat_patctl.control & CTL_MEMORY) != 0) show_memory_info(); +- if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) show_framesize(); +- if ((pat_patctl.control & CTL_ANYINFO) != 0) +- { +- rc = show_pattern_info(); +- if (rc != PR_OK) return rc; +- } ++ ++ rc = show_pattern_info(); ++ if (rc != PR_OK) return rc; + break; + + /* Save the stack of compiled patterns to a file, then empty the stack. */ +@@ -5395,7 +5407,7 @@ BOOL utf; + uint32_t k; + uint8_t *p = buffer; + unsigned int delimiter = *p++; +-int errorcode; ++int rc, errorcode; + void *use_pat_context; + void *use_pbuffer = NULL; + uint32_t use_forbid_utf = forbid_utf; +@@ -5724,7 +5736,6 @@ local character tables. Neither does it have 16-bit or 32-bit support. */ + if ((pat_patctl.control & CTL_POSIX) != 0) + { + #ifdef SUPPORT_PCRE2_8 +- int rc; + int cflags = 0; + const char *msg = "** Ignored with POSIX interface:"; + #endif +@@ -5931,7 +5942,6 @@ ends up back in the usual place. */ + + if (pat_patctl.convert_type != CONVERT_UNSET) + { +- int rc; + int convert_return = PR_OK; + uint32_t convert_options = pat_patctl.convert_type; + void *converted_pattern; +@@ -6246,13 +6256,8 @@ if ((pat_patctl.control2 & CTL2_NL_SET) != 0) + + /* Output code size and other information if requested. */ + +-if ((pat_patctl.control & CTL_MEMORY) != 0) show_memory_info(); +-if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) show_framesize(); +-if ((pat_patctl.control & CTL_ANYINFO) != 0) +- { +- int rc = show_pattern_info(); +- if (rc != PR_OK) return rc; +- } ++rc = show_pattern_info(); ++if (rc != PR_OK) return rc; + + /* The "push" control requests that the compiled pattern be remembered on a + stack. This is mainly for testing the serialization functionality. */ +-- +2.51.2.vfs.0.0 + diff --git a/pcre2-config.in b/pcre2-config.in index 9639a90..f85e12f 100644 --- a/pcre2-config.in +++ b/pcre2-config.in @@ -23,8 +23,8 @@ fi usage="Usage: pcre2-config [--prefix] [--exec-prefix] [--version] $libs $cflags" if test $# -eq 0; then - echo "${usage}" 1>&2 - exit 1 + echo "${usage}" 1>&2 + exit 1 fi libR= @@ -38,9 +38,19 @@ case `uname -s` in esac libS= -if test @libdir@ != /usr/lib ; then - libS=-L@libdir@ -fi +case "@libdir@" in + # system locations on Linux, no -L needed + /usr/lib|/usr/lib32|/usr/lib64|/usr/lib/*-gnu*) + ;; + /lib|/lib32|/lib64|/lib/*-gnu*) + ;; + # system locations on AIX and Solaris, no -L needed + /usr/lib/64|/usr/lib/amd*|/usr/lib/sparc*|/usr/lib/ppc*) + ;; + *) + libS="-L@libdir@" + ;; +esac while test $# -gt 0; do case "$1" in diff --git a/src/config-cmake.h.in b/src/config-cmake.h.in index bcc62c0..fb994d8 100644 --- a/src/config-cmake.h.in +++ b/src/config-cmake.h.in @@ -13,6 +13,7 @@ #cmakedefine HAVE_MEMFD_CREATE 1 #cmakedefine HAVE_SECURE_GETENV 1 +#cmakedefine HAVE_SETRLIMIT 1 #cmakedefine SUPPORT_PCRE2_8 1 #cmakedefine SUPPORT_PCRE2_16 1 diff --git a/src/config.h.generic b/src/config.h.generic index 48da31e..5380525 100644 --- a/src/config.h.generic +++ b/src/config.h.generic @@ -119,6 +119,9 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ /* Define to 1 if you have the `secure_getenv' function. */ /* #undef HAVE_SECURE_GETENV */ +/* Define to 1 if you have the `setrlimit' function. */ +/* #undef HAVE_SETRLIMIT */ + /* Define to 1 if you have the header file. */ /* #undef HAVE_STDINT_H */ @@ -247,7 +250,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ #define PACKAGE_NAME "PCRE2" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PCRE2 10.47" +#define PACKAGE_STRING "PCRE2 10.48-RC1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pcre2" @@ -256,7 +259,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "10.47" +#define PACKAGE_VERSION "10.48-RC1" /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested parentheses (of any kind) in a pattern. This limits the amount of system @@ -475,7 +478,7 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ #endif /* Version number of package */ -#define VERSION "10.47" +#define VERSION "10.48-RC1" /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ diff --git a/src/config.h.in b/src/config.h.in index 0f2ef38..1ddb4c6 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -119,6 +119,9 @@ surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ /* Define to 1 if you have the `secure_getenv' function. */ #undef HAVE_SECURE_GETENV +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H diff --git a/src/libpcre2-16.sym b/src/libpcre2-16.sym.in similarity index 97% rename from src/libpcre2-16.sym rename to src/libpcre2-16.sym.in index fd5257d..e345f96 100644 --- a/src/libpcre2-16.sym +++ b/src/libpcre2-16.sym.in @@ -80,9 +80,8 @@ PCRE2_10.47 { pcre2_substring_list_get_16; pcre2_substring_nametable_scan_16; pcre2_substring_number_from_name_16; - local: - _fini; - _init; + +@PCRE2_EXTRA_LOCAL_SYMS@ }; -# PCRE2_10.48 {} PCRE2_10.47; +PCRE2_10.48 { } PCRE2_10.47; diff --git a/src/libpcre2-32.sym b/src/libpcre2-32.sym.in similarity index 97% rename from src/libpcre2-32.sym rename to src/libpcre2-32.sym.in index d4606c2..5a9f2c9 100644 --- a/src/libpcre2-32.sym +++ b/src/libpcre2-32.sym.in @@ -80,9 +80,8 @@ PCRE2_10.47 { pcre2_substring_list_get_32; pcre2_substring_nametable_scan_32; pcre2_substring_number_from_name_32; - local: - _fini; - _init; + +@PCRE2_EXTRA_LOCAL_SYMS@ }; -# PCRE2_10.48 {} PCRE2_10.47; +PCRE2_10.48 { } PCRE2_10.47; diff --git a/src/libpcre2-8.sym b/src/libpcre2-8.sym.in similarity index 97% rename from src/libpcre2-8.sym rename to src/libpcre2-8.sym.in index 368b4e4..ac30042 100644 --- a/src/libpcre2-8.sym +++ b/src/libpcre2-8.sym.in @@ -80,9 +80,8 @@ PCRE2_10.47 { pcre2_substring_list_get_8; pcre2_substring_nametable_scan_8; pcre2_substring_number_from_name_8; - local: - _fini; - _init; + +@PCRE2_EXTRA_LOCAL_SYMS@ }; -# PCRE2_10.48 {} PCRE2_10.47; +PCRE2_10.48 { } PCRE2_10.47; diff --git a/src/libpcre2-posix.sym b/src/libpcre2-posix.sym.in similarity index 73% rename from src/libpcre2-posix.sym rename to src/libpcre2-posix.sym.in index 04a56cf..ee31d01 100644 --- a/src/libpcre2-posix.sym +++ b/src/libpcre2-posix.sym.in @@ -5,9 +5,8 @@ PCRE2_10.47 { pcre2_regerror; pcre2_regexec; pcre2_regfree; - local: - _fini; - _init; + +@PCRE2_EXTRA_LOCAL_SYMS@ }; -# PCRE2_10.48 {} PCRE2_10.47; +PCRE2_10.48 { } PCRE2_10.47; diff --git a/src/pcre2.h.generic b/src/pcre2.h.generic index 4034e5a..283d61a 100644 --- a/src/pcre2.h.generic +++ b/src/pcre2.h.generic @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 47 -#define PCRE2_PRERELEASE -#define PCRE2_DATE 2025-10-21 +#define PCRE2_MINOR 48 +#define PCRE2_PRERELEASE -RC1 +#define PCRE2_DATE 2026-08-27 /* When an application links to a PCRE2 DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate @@ -438,6 +438,7 @@ released, the numbers must not be changed. */ #define PCRE2_ERROR_DIFFSUBSOFFSET (-73) #define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) #define PCRE2_ERROR_BAD_BACKSLASH_K (-75) +#define PCRE2_ERROR_PARTIALSUBS (-76) /* Request types for pcre2_pattern_info() */ diff --git a/src/pcre2.h.in b/src/pcre2.h.in index 0dffe65..06bcfad 100644 --- a/src/pcre2.h.in +++ b/src/pcre2.h.in @@ -438,6 +438,7 @@ released, the numbers must not be changed. */ #define PCRE2_ERROR_DIFFSUBSOFFSET (-73) #define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) #define PCRE2_ERROR_BAD_BACKSLASH_K (-75) +#define PCRE2_ERROR_PARTIALSUBS (-76) /* Request types for pcre2_pattern_info() */ diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c index f126e41..1081cf6 100644 --- a/src/pcre2_compile.c +++ b/src/pcre2_compile.c @@ -2020,7 +2020,7 @@ else else { *errorcodeptr = ERR64; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } break; @@ -2107,7 +2107,7 @@ else else { *errorcodeptr = ERR67; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } } /* End of \x{} processing */ @@ -8066,6 +8066,13 @@ for (;; pptr++) tempcode += GET(tempcode, 1); break; #endif + + case OP_REF: + case OP_REFI: + case OP_DNREF: + case OP_DNREFI: + tempcode += PRIV(OP_lengths)[*tempcode]; + break; } /* If tempcode is equal to code (which points to the end of the repeated @@ -9363,10 +9370,10 @@ return c; /* This function is called to skip parts of the parsed pattern when finding the length of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find -the end of the branch, it is called to skip over an internal lookaround or -(DEFINE) group, and it is also called to skip to the end of a class, during -which it will never encounter nested groups (but there's no need to have -special code for that). +the end of the branch; it is called to skip over an internal lookaround or +(DEFINE) group; and it is also called to skip to the end of a class, during +which it will never encounter nested groups (however extended classes can +themselves be nested, with their own class-nesting level). When called to find the end of a branch or group, pptr must point to the first meta code inside the branch, not the branch-starting code. In other cases it @@ -9387,6 +9394,7 @@ static uint32_t * parsed_skip(uint32_t *pptr, uint32_t skiptype) { uint32_t nestlevel = 0; +uint32_t class_nestlevel = 0; for (;; pptr++) { @@ -9426,12 +9434,19 @@ for (;; pptr++) pptr += pptr[1]; break; - /* These are the "active" items in this loop. */ + /* These are the active items for tracking class nesting. */ + + case META_CLASS: + case META_CLASS_NOT: + if (skiptype == PSKIP_CLASS) class_nestlevel++; + break; case META_CLASS_END: - if (skiptype == PSKIP_CLASS) return pptr; + if (skiptype == PSKIP_CLASS && --class_nestlevel == 0) return pptr; break; + /* These are the "active" items for tracking ALT/KET nesting. */ + case META_ATOMIC: case META_CAPTURE: case META_COND_ASSERT: @@ -10160,6 +10175,11 @@ for (; *pptr != META_END; pptr++) case META_COMMIT: case META_DOLLAR: case META_DOT: + case META_ECLASS_AND: + case META_ECLASS_NOT: + case META_ECLASS_OR: + case META_ECLASS_SUB: + case META_ECLASS_XOR: case META_FAIL: case META_PLUS: case META_PLUS_PLUS: diff --git a/src/pcre2_compile_class.c b/src/pcre2_compile_class.c index 9a1fc02..c6f30d6 100644 --- a/src/pcre2_compile_class.c +++ b/src/pcre2_compile_class.c @@ -721,9 +721,13 @@ while (TRUE) else cranges->char_lists_types |= tmp1 << tmp2; - if (range_start < XCL_CHAR_LIST_LOW_16_START) break; + if (range_end < XCL_CHAR_LIST_LOW_16_START || tmp2 == 0) + { + PCRE2_ASSERT(range_start < XCL_CHAR_LIST_LOW_16_START); + break; + } - PCRE2_ASSERT(tmp2 >= XCL_TYPE_BIT_LEN); + PCRE2_ASSERT((tmp2 % XCL_TYPE_BIT_LEN) == 0); char_list_end = char_list_start - 1; char_list_start = *char_list_next++; tmp1 = 0; @@ -1802,17 +1806,14 @@ if ((xclass_props & XCLASS_REQUIRED) != 0) PUT(code, 0, (uint32_t)(char_lists_size >> 1)); code += LINK_SIZE; -#if defined PCRE2_DEBUG || defined SUPPORT_VALGRIND + /* If we added padding to align the list, initialize the bytes to + defined values, so the library is valgrind-clean. It could also + be a security concern for clients calling into PCRE2 via bindings + from a memory-safe language, if pcre2_serialize_encode() exposes + uninitialized memory that may contain sensitive information. */ + if ((char_lists_size & 0x2) != 0) - { - /* In debug the unused 16 bit value is set - to a fixed value and marked unused. */ - ((uint16_t*)data)[-1] = 0x5555; -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_NOACCESS(data - 2, 2); -#endif - } -#endif + ((uint16_t*)data)[-1] = 0xdead; cb->char_lists_size = CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t)); diff --git a/src/pcre2_convert.c b/src/pcre2_convert.c index ad7312a..8a2b293 100644 --- a/src/pcre2_convert.c +++ b/src/pcre2_convert.c @@ -1215,9 +1215,11 @@ for (int i = 0; i < 2; i++) /* Allocate memory for the buffer, with hidden space for an allocator at the start. The next time round the loop runs the conversion for real. */ - allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (*bufflenptr + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)ccontext); - if (allocated == NULL) + if (*bufflenptr > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / + CU2BYTES(1)) - 1 || + (allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(*bufflenptr + 1), + (pcre2_memctl *)ccontext)) == NULL) { *bufflenptr = 0; /* Error offset */ return PCRE2_ERROR_NOMEMORY; diff --git a/src/pcre2_dfa_match.c b/src/pcre2_dfa_match.c index f507acf..314e977 100644 --- a/src/pcre2_dfa_match.c +++ b/src/pcre2_dfa_match.c @@ -1601,7 +1601,7 @@ for (;;) goto ANYNL01; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL01: @@ -1879,7 +1879,7 @@ for (;;) goto ANYNL02; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL02: @@ -2160,7 +2160,7 @@ for (;;) goto ANYNL03; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL03: @@ -2341,7 +2341,7 @@ for (;;) if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0) reset_could_continue = TRUE; } - else if (UCHAR21TEST(ptr + 1) == CHAR_LF) + else if (ptr[1] == CHAR_LF) { ADD_NEW_DATA(-(state_offset + 1), 0, 1); } @@ -3745,7 +3745,7 @@ for (;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -3773,7 +3773,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -3833,7 +3833,7 @@ for (;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else /* 8-bit code units */ @@ -3885,7 +3885,7 @@ for (;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -3899,7 +3899,7 @@ for (;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -3967,7 +3967,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -3988,7 +3988,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ @@ -4096,9 +4096,9 @@ for (;;) not contain any explicit matches for \r or \n, and the newline option is CRLF or ANY or ANYCRLF, advance the match position by one more character. */ - if (UCHAR21TEST(start_match - 1) == CHAR_CR && + if (start_match[-1] == CHAR_CR && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL && + *start_match == CHAR_NL && (re->flags & PCRE2_HASCRORLF) == 0 && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF || diff --git a/src/pcre2_error.c b/src/pcre2_error.c index df26add..46753f0 100644 --- a/src/pcre2_error.c +++ b/src/pcre2_error.c @@ -305,7 +305,9 @@ static const unsigned char match_error_texts[] = "substitute subject differs from prior match call\0" "substitute start offset differs from prior match call\0" "substitute options differ from prior match call\0" + /* 75 */ "disallowed use of \\K in lookaround\0" + "replacement $' or $_ not supported with partial match\0" ; diff --git a/src/pcre2_internal.h b/src/pcre2_internal.h index aa79409..930c745 100644 --- a/src/pcre2_internal.h +++ b/src/pcre2_internal.h @@ -477,8 +477,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ - UCHAR21TEST(p) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1]) \ + *p == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || p[1] == NLBLOCK->nl[1]) \ ) \ ) @@ -491,8 +491,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ - UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ + *(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || *(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ ) \ ) @@ -1518,7 +1518,7 @@ High16 and High32: the highest bit is always one The items are ordered in increasing order, so binary search can be used to find the lower bound of an input character. The lower bound is the highest item, which value is less or equal than the input -character. If the lower bit of the item is cleard, or the character +character. If the lower bit of the item is cleared, or the character stored in the item equals to the input character, the input character is in the character list. */ @@ -1539,14 +1539,19 @@ character is in the character list. */ #define XCL_CHAR_LIST_HIGH_32_END 0xffffffff #define XCL_CHAR_LIST_HIGH_32_ADD 0x80000000 -/* Mask for getting the descriptors of character list ranges. -Each descriptor has XCL_TYPE_BIT_LEN bits, and can be processed -by XCL_BEGIN_WITH_RANGE and XCL_ITEM_COUNT_MASK macros. */ +/* Mask and length values for getting the descriptors of +all character list ranges. The bit length of each descriptor +is XCL_TYPE_BIT_LEN so the total size is 4*XCL_TYPE_BIT_LEN +(currently 12 bit). This data is stored for all four character +lists, even if no characters are present in a list. */ #define XCL_TYPE_MASK 0xfff #define XCL_TYPE_BIT_LEN 3 -/* If this bit is set, the first item of the character list is the -end of a range, which started before the starting character of the -character list. */ +/* If this bit is set for a character class, the first item of the +character list is the end of a range, which started before the +starting character of the character list. If this bit is set, and +no characters are present in the list, the whole character class +is part of a range. E.g: [\x{500}-\x{12000}] covers the entire +0x8000-0xffff range. */ #define XCL_BEGIN_WITH_RANGE 0x4 /* Number of items in the character list: 0, 1, or 2. The value 3 represents that the item count is stored at the begining of the @@ -2296,6 +2301,7 @@ is available. */ #define _pcre2_is_newline PCRE2_SUFFIX(_pcre2_is_newline_) #define _pcre2_jit_free_rodata PCRE2_SUFFIX(_pcre2_jit_free_rodata_) #define _pcre2_jit_free PCRE2_SUFFIX(_pcre2_jit_free_) +#define _pcre2_jit_check_exec PCRE2_SUFFIX(_pcre2_jit_check_exec_) #define _pcre2_jit_get_size PCRE2_SUFFIX(_pcre2_jit_get_size_) #define _pcre2_jit_get_target PCRE2_SUFFIX(_pcre2_jit_get_target_) #define _pcre2_memctl_malloc PCRE2_SUFFIX(_pcre2_memctl_malloc_) @@ -2325,6 +2331,7 @@ extern BOOL _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR, uint32_t *, BOOL); extern void _pcre2_jit_free_rodata(void *, void *); extern void _pcre2_jit_free(void *, pcre2_memctl *); +extern BOOL _pcre2_jit_check_exec(void *, uint32_t); extern size_t _pcre2_jit_get_size(void *); const char * _pcre2_jit_get_target(void); extern void * _pcre2_memctl_malloc(size_t, pcre2_memctl *); diff --git a/src/pcre2_intmodedep.h b/src/pcre2_intmodedep.h index 6cefb61..269c418 100644 --- a/src/pcre2_intmodedep.h +++ b/src/pcre2_intmodedep.h @@ -250,21 +250,6 @@ check is needed before accessing these tables. */ /* ----------------- Character-handling macros ----------------- */ -/* There is a proposed future special "UTF-21" mode, in which only the lowest -21 bits of a 32-bit character are interpreted as UTF, with the remaining 11 -high-order bits available to the application for other uses. In preparation for -the future implementation of this mode, there are macros that load a data item -and, if in this special mode, mask it to 21 bits. These macros all have names -starting with UCHAR21. In all other modes, including the normal 32-bit -library, the macros all have the same simple definitions. When the new mode is -implemented, it is expected that these definitions will be varied appropriately -using #ifdef when compiling the library that supports the special mode. */ - -#define UCHAR21(eptr) (*(eptr)) -#define UCHAR21TEST(eptr) (*(eptr)) -#define UCHAR21INC(eptr) (*(eptr)++) -#define UCHAR21INCTEST(eptr) (*(eptr)++) - /* When UTF encoding is being used, a character is no longer just a single byte in 8-bit mode or a single short in 16-bit mode. The macros for character handling generate simple sequences when used in the basic mode, and more @@ -891,38 +876,125 @@ we don't generate any code when all is well. */ typedef struct heapframe { /* The first set of fields are variables that have to be preserved over calls - to RRMATCH(), but which do not need to be copied to new frames. */ + to RMATCH(), but which do not need to be copied to new frames. */ PCRE2_SPTR ecode; /* The current position in the pattern */ - PCRE2_SPTR temp_sptr[2]; /* Used for short-term PCRE2_SPTR values */ - PCRE2_SIZE length; /* Used for character, string, or code lengths */ PCRE2_SIZE back_frame; /* Amount to subtract on RRETURN */ - PCRE2_SIZE temp_size; /* Used for short-term PCRE2_SIZE values */ uint32_t rdepth; /* Function "recursion" depth within pcre2_match() */ uint32_t group_frame_type; /* Type information for group frames */ - uint32_t temp_32[4]; /* Used for short-term 32-bit or BOOL values */ uint8_t return_id; /* Where to go on in internal "return" */ uint8_t op; /* Processing opcode */ + uint8_t byte1; /* A temporary byte to store anything */ + uint8_t byte2; /* A temporary byte to store anything */ - /* At this point, the structure is 16-bit aligned. On most architectures + /* At this point, the structure is 32-bit aligned. On most architectures the alignment requirement for a pointer will ensure that the eptr field below is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer - that is 16-bit aligned. We must therefore ensure that what comes between here - and eptr is an odd multiple of 16 bits so as to get back into 32-bit - alignment. This happens naturally when PCRE2_UCHAR is 8 bits wide, but needs - fudges in the other cases. In the 32-bit case the padding comes first so that - the occu field itself is 32-bit aligned. Without the padding, this structure - is no longer a multiple of PCRE2_SIZE on m68k, and the check below fails. */ - + that is 16-bit aligned, so all uint8_t members above are required for a 32 + bit alignment. */ + + union { + /* Fields for storing localized data, which + is preserved by RMATCH() calls. */ + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR charptr; + uint32_t min; + uint32_t max; + uint32_t c; + union { + uint32_t oc; + /* Buffer for other case code units. The size of + the buffer is enough to store the longest character. */ #if PCRE2_CODE_UNIT_WIDTH == 8 - PCRE2_UCHAR occu[6]; /* Used for other case code units */ + PCRE2_UCHAR occu[4]; #elif PCRE2_CODE_UNIT_WIDTH == 16 - PCRE2_UCHAR occu[2]; /* Used for other case code units */ - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ + PCRE2_UCHAR occu[2]; #else - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ - PCRE2_UCHAR occu[1]; /* Used for other case code units */ + PCRE2_UCHAR occu[1]; #endif + } oc; + } char_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t c; + uint32_t oc; + } charnot_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR byte_map_address; + uint32_t min; + uint32_t max; + } class_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR xclass_data; + uint32_t min; + uint32_t max; + } xclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR eclass_data; + PCRE2_SIZE eclass_len; + uint32_t min; + uint32_t max; + } eclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t ctype; + uint32_t propvalue; + } type_repeat; + + struct { + PCRE2_SPTR start; + PCRE2_SIZE offset; + PCRE2_SIZE length; + uint32_t min; + uint32_t max; + } ref_repeat; + + struct { + uint32_t frame_type; /* Set for all that use GROUPLOOP */ + } op_bra; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR start_group; + uint32_t frame_type; + } op_brapos; + + struct { + PCRE2_SPTR start_branch; + uint32_t frame_type; + } op_recurse; + + struct { + PCRE2_SPTR saved_end_subject; + PCRE2_SPTR saved_eptr; + PCRE2_SIZE true_end_extra; + uint32_t saved_moptions; + } op_assert_scs; + + struct { + PCRE2_SPTR start_branch; + PCRE2_SIZE length; + } op_cond; + + struct { + uint32_t min; + uint32_t max; + } op_vreverse; + } fields; /* The rest have to be copied from the previous frame whenever a new frame becomes current. The final field is specified as a large vector so that diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c index 3ab4592..105a1dd 100644 --- a/src/pcre2_jit_compile.c +++ b/src/pcre2_jit_compile.c @@ -321,6 +321,7 @@ typedef struct ref_iterator_backtrack { backtrack_common common; /* Next iteration. */ struct sljit_label *matchingpath; + BOOL possessive_or_exact; } ref_iterator_backtrack; typedef struct recurse_entry { @@ -1142,7 +1143,11 @@ cc += PRIV(OP_lengths)[*cc]; /* Although do_casefulcmp() uses only one local, the allocate_stack() calls during the repeat destroys LOCAL1 variables. */ if (*cc >= OP_CRSTAR && *cc <= OP_CRPOSRANGE) + { locals_size += 2 * SSIZE_OF(sw); + if (*cc >= OP_CRPOSRANGE && GET2(cc, 1 + IMM2_SIZE + 1) != GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE)) + locals_size += SSIZE_OF(sw); + } return (current_locals_size >= locals_size) ? current_locals_size : locals_size; } @@ -5413,15 +5418,15 @@ OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); static void do_utfreadchar_invalid(compiler_common *common) { /* Slow decoding a UTF-16 character. TMP1 contains the first half -of the character (>= 0xd800). Return char value in TMP1. STR_PTR is -undefined for invalid characters. */ +of the character (>= 0xd800). TMP2 contains TMP1 - 0xd800. Return +char value in TMP1. STR_PTR is unchanged for invalid characters. */ DEFINE_COMPILER; struct sljit_jump *exit_invalid[3]; sljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0); /* TMP2 contains the high surrogate. */ -exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00); +exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -5435,9 +5440,10 @@ exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); +JUMPHERE(exit_invalid[2]); +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); -JUMPHERE(exit_invalid[2]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } @@ -5635,7 +5641,6 @@ struct sljit_jump *start; struct sljit_jump *end = NULL; struct sljit_jump *end2 = NULL; #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -struct sljit_label *loop; struct sljit_jump *jump; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ jump_list *newline = NULL; @@ -5741,7 +5746,7 @@ mainloop = LABEL(); /* Increasing the STR_PTR here requires one less jump in the most common case. */ #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -if (common->utf && !common->invalid_utf) readuchar = TRUE; +if (common->utf) readuchar = TRUE; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ if (newlinecheck) readuchar = TRUE; @@ -5757,13 +5762,11 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x40, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0); + OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); + SELECT(SLJIT_EQUAL, STR_PTR, TMP3, 0, STR_PTR); JUMPHERE(jump); } else if (common->utf) @@ -5777,13 +5780,9 @@ else if (common->utf) if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); + jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); JUMPHERE(jump); } else if (common->utf) @@ -6244,6 +6243,7 @@ while (TRUE) repeat = GET2(cc, 1); if (repeat <= 0) { + repeat = 1; chars_end = chars; continue; } @@ -8390,9 +8390,10 @@ int offset = 0; struct sljit_label *label; struct sljit_jump *zerolength; struct sljit_jump *jump = NULL; +jump_list *match_failed = NULL; PCRE2_SPTR ccbegin = cc; int min = 0, max = 0; -BOOL minimize; +BOOL minimize, exact; PUSH_BACKTRACK(sizeof(ref_iterator_backtrack), cc, NULL); @@ -8415,31 +8416,50 @@ type = cc[1 + IMM2_SIZE]; SLJIT_COMPILE_ASSERT((OP_CRSTAR & 0x1) == 0, crstar_opcode_must_be_even); /* Update ref_update_local_size() when this changes. */ SLJIT_ASSERT(local_start + 2 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); -minimize = (type & 0x1) != 0; +minimize = FALSE; +exact = FALSE; switch(type) { - case OP_CRSTAR: case OP_CRMINSTAR: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRSTAR: + case OP_CRPOSSTAR: min = 0; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRPLUS: + case OP_CRMINPLUS: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRPLUS: + case OP_CRPOSPLUS: min = 1; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRQUERY: + case OP_CRMINQUERY: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRQUERY: + case OP_CRPOSQUERY: min = 0; max = 1; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRRANGE: + case OP_CRPOSRANGE: min = GET2(cc, 1 + IMM2_SIZE + 1); max = GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE); + SLJIT_ASSERT(min > 1 || max > 1); + if (min == max) + exact = TRUE; cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE; break; default: @@ -8447,6 +8467,86 @@ switch(type) break; } +if (type >= OP_CRPOSSTAR || exact) + { + BACKTRACK_AS(ref_iterator_backtrack)->possessive_or_exact = TRUE; + if (ref) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + if (min > 0 && !common->unset_backref) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1))); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1)); + } + else + { + compile_dnref_search(common, ccbegin, min > 0 ? &backtrack->own_backtracks : NULL); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); + } + + if (exact) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, min); + else if (type != OP_CRPOSSTAR) + { + /* STR_PTR is NULL before reaching min. */ + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, min > 0 ? SLJIT_IMM : STR_PTR, 0); + if (type == OP_CRPOSRANGE) + { + SLJIT_ASSERT(local_start + 3 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 0); + } + } + + label = LABEL(); + if (!ref) + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw)); + + if (type == OP_CRPOSSTAR) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + + compile_ref_matchingpath(common, ccbegin, exact ? &backtrack->own_backtracks : &match_failed, FALSE, FALSE); + + if (type == OP_CRPOSSTAR) + JUMPTO(SLJIT_JUMP, label); + else if (type == OP_CRPOSPLUS || type == OP_CRPOSQUERY) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (type == OP_CRPOSPLUS) + JUMPTO(SLJIT_JUMP, label); + } + else if (exact) + { + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); + JUMPTO(SLJIT_NOT_ZERO, label); + } + else + { + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 1); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), TMP1, 0); + if (min > 0) + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (max == 0) + JUMPTO(SLJIT_JUMP, label); + else + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, max, label); + } + + if (!exact) + { + set_jumps(match_failed, LABEL()); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), local_start); + + if (type != OP_CRPOSSTAR) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0)); + } + + JUMPHERE(zerolength); + count_match(common); + return cc; + } + if (!minimize) { if (min == 0) @@ -8458,6 +8558,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0); /* Temporary release of STR_PTR. */ OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + /* Handles both invalid and empty cases. Since the minimum repeat, is zero the invalid case is basically the same as an empty case. */ if (ref) @@ -8469,6 +8570,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); } + /* Restore if not zero length. */ OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); } @@ -8477,6 +8579,7 @@ if (!minimize) allocate_stack(common, 1); if (ref) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); if (ref) @@ -8504,11 +8607,11 @@ if (!minimize) if (min > 1 || max > 1) { - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, TMP1, 0); if (min > 1) CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + if (max > 1) { jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max); @@ -12139,6 +12242,12 @@ PCRE2_UCHAR type; type = cc[PRIV(OP_lengths)[*cc]]; +if (CURRENT_AS(ref_iterator_backtrack)->possessive_or_exact) + { + set_jumps(current->own_backtracks, LABEL()); + return; + } + if ((type & 0x1) == 0) { /* Maximize case. */ @@ -12405,6 +12514,8 @@ else if (SLJIT_UNLIKELY(opcode == OP_ASSERT_SCS)) if (common->restore_end_ptr == 0) common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw); } +else if (SLJIT_UNLIKELY(opcode == OP_ASSERTBACK_NA) && PRIVATE_DATA(ccbegin + 1)) + OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); if (SLJIT_UNLIKELY(opcode == OP_ONCE)) { diff --git a/src/pcre2_jit_match_inc.h b/src/pcre2_jit_match_inc.h index 32d4c8a..ba21000 100644 --- a/src/pcre2_jit_match_inc.h +++ b/src/pcre2_jit_match_inc.h @@ -117,6 +117,7 @@ jit_arguments arguments; int rc; int index = 0; +/* The same check is performed by jit_check_exec(). */ if ((options & PCRE2_PARTIAL_HARD) != 0) index = 2; else if ((options & PCRE2_PARTIAL_SOFT) != 0) @@ -125,6 +126,16 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0) if (functions == NULL || functions->executable_funcs[index] == NULL) return match_data->rc = PCRE2_ERROR_JIT_BADOPTION; +/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT, +free the memory that was obtained. */ + +if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0) + { + match_data->memctl.free((void *)match_data->subject, + match_data->memctl.memory_data); + match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT; + } + /* Sanity checks should be handled by pcre2_match. */ arguments.str = subject + start_offset; arguments.begin = subject; diff --git a/src/pcre2_jit_misc_inc.h b/src/pcre2_jit_misc_inc.h index 0225fc6..16c230e 100644 --- a/src/pcre2_jit_misc_inc.h +++ b/src/pcre2_jit_misc_inc.h @@ -200,17 +200,28 @@ if (jit_stack != NULL) /************************************************* -* Get target CPU type * +* Checks function compilation * *************************************************/ -const char* -PRIV(jit_get_target)(void) +BOOL +PRIV(jit_check_exec)(void *executable_jit, uint32_t options) { #ifndef SUPPORT_JIT -return "JIT is not supported"; +(void)executable_jit; +(void)options; +return FALSE; #else /* SUPPORT_JIT */ -return sljit_get_platform_name(); -#endif /* SUPPORT_JIT */ +/* The same check is performed at the beginning of pcre2_jit_match(). */ +executable_functions *functions = (executable_functions *)executable_jit; +int index = 0; + +if ((options & PCRE2_PARTIAL_HARD) != 0) + index = 2; +else if ((options & PCRE2_PARTIAL_SOFT) != 0) + index = 1; + +return functions->executable_funcs[index] != NULL; +#endif } @@ -231,4 +242,19 @@ return executable_sizes[0] + executable_sizes[1] + executable_sizes[2]; #endif } +/************************************************* +* Get target CPU type * +*************************************************/ + +const char* +PRIV(jit_get_target)(void) +{ +#ifndef SUPPORT_JIT +return "JIT is not supported"; +#else /* SUPPORT_JIT */ +return sljit_get_platform_name(); +#endif /* SUPPORT_JIT */ +} + + /* End of pcre2_jit_misc_inc.h */ diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c index 1fc44db..7c4bcd6 100644 --- a/src/pcre2_jit_test.c +++ b/src/pcre2_jit_test.c @@ -281,6 +281,7 @@ static struct regression_test_case regression_test_cases[] = { { CM, A, 0, 0, "a1277|a1377|bx487", "bX487" }, { 0, A, 0, 0, "(a|)b*+a", "a" }, { 0, A, 0, 0 | F_NOMATCH, "(.|.|.|.|.)(|.|.|.|.)(.||.|.|.)(.|.||.|.)(.|.|.||.)(.|.|.|.|)(A|.|.|.|.)(.|A|.|.|.)(.|.|A|.|.)(.|.|.|A|.)(.|.|.|.|A)(B|.|.|.|.)(.|B|.|.|.)(.|.|B|.|.)(.|.|.|B|.)(.|.|.|.|B)xa", "1234567890123456ax" }, + { 0, A, 0, 0, "(CHAN|LINE)[ab]{0,2}", "LINE" }, /* Greedy and non-greedy ? operators. */ { MU, A, 0, 0, "(?:a)?a", "laab" }, @@ -656,6 +657,7 @@ static struct regression_test_case regression_test_cases[] = { { MU, A, 0, 0 | F_NOMATCH, "a(?!)b", "ab" }, { MU, A, 0, 0, "(?(?back_frame #define Fcapture_last F->capture_last @@ -180,12 +180,10 @@ of use and undefined afterwards. */ #define Feptr F->eptr #define Fgroup_frame_type F->group_frame_type #define Flast_group_offset F->last_group_offset -#define Flength F->length #define Fmark F->mark #define Frdepth F->rdepth #define Fstart_match F->start_match #define Foffset_top F->offset_top -#define Foccu F->occu #define Fop F->op #define Fovector F->ovector #define Freturn_id F->return_id @@ -457,8 +455,8 @@ if (caseless) { uint32_t cc, cp; if (eptr >= mb->end_subject) return 1; /* Partial match */ - cc = UCHAR21TEST(eptr); - cp = UCHAR21TEST(p); + cc = *eptr; + cp = *p; if (TABLE_GET(cp, mb->lcc, cp) != TABLE_GET(cc, mb->lcc, cc)) return -1; /* No match */ p++; @@ -478,7 +476,7 @@ else for (; length > 0; length--) { if (eptr >= mb->end_subject) return 1; /* Partial match */ - if (UCHAR21INCTEST(p) != UCHAR21INCTEST(eptr)) return -1; /* No match */ + if (*p++ != *eptr++) return -1; /* No match */ } } @@ -697,7 +695,7 @@ heapframe *frames_top; /* End of frames vector */ heapframe *assert_accept_frame = NULL; /* For passing back a frame with captures */ PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ -/* Local variables that do not need to be preserved over calls to RRMATCH(). */ +/* Local variables that do not need to be preserved over calls to RMATCH(). */ PCRE2_SPTR branch_end = NULL; PCRE2_SPTR branch_start; @@ -816,11 +814,11 @@ if (group_frame_type != 0) break; case GF_NOCAPTURE: - fprintf(stderr, "nocapture op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "nocapture op=%d", Fop); break; case GF_CONDASSERT: - fprintf(stderr, "condassert op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "condassert op=%d", Fop); break; case GF_RECURSE: @@ -1066,7 +1064,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr == mb->end_subject - 1 && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -1112,17 +1110,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); - if (Flength > (PCRE2_SIZE)(mb->end_subject - Feptr)) + GETCHARLEN(fc, Fecode, length); + if (length > (PCRE2_SIZE)(mb->end_subject - Feptr)) { CHECK_PARTIAL(); /* Not SCHECK_PARTIAL() */ RRETURN(MATCH_NOMATCH); } - for (; Flength > 0; Flength--) + for (; length > 0; length--) { - if (*Fecode++ != UCHAR21INC(Feptr)) RRETURN(MATCH_NOMATCH); + if (*Fecode++ != *Feptr++) RRETURN(MATCH_NOMATCH); } } else @@ -1157,9 +1155,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); + GETCHARLEN(fc, Fecode, length); /* If the pattern character's value is < 128, we know that its other case (if any) is also < 128 (and therefore only one code unit long in all @@ -1168,7 +1166,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc < 128) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH); Fecode++; Feptr++; @@ -1176,14 +1174,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* Otherwise we must pick up the subject character and use Unicode property support to test its other case. Note that we cannot use the - value of "Flength" to check for sufficient bytes left, because the other + value of "length" to check for sufficient bytes left, because the other case of the character may have more or fewer code units. */ else { uint32_t dc; GETCHARINC(dc, Feptr); - Fecode += Flength; + Fecode += length; if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH); } } @@ -1193,7 +1191,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; fc = Fecode[1]; if (fc < 128) { @@ -1257,7 +1255,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { uint32_t ch; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; ch = Fecode[1]; Fecode += 2; @@ -1282,7 +1280,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { uint32_t ch = Fecode[1]; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc)) RRETURN(MATCH_NOMATCH); Fecode += 2; @@ -1293,13 +1291,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* ===================================================================== */ /* Match a single character repeatedly. */ -#define Loclength F->temp_size -#define Lstart_eptr F->temp_sptr[0] -#define Lcharptr F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Llength F->byte1 +#define Loclength F->byte2 +#define Lstart_eptr F->fields.char_repeat.start_eptr +#define Lcharptr F->fields.char_repeat.charptr +#define Lmin F->fields.char_repeat.min +#define Lmax F->fields.char_repeat.max +#define Lc F->fields.char_repeat.c +#define Loc F->fields.char_repeat.oc.oc +#define Loccu F->fields.char_repeat.oc.occu case OP_EXACT: case OP_EXACTI: @@ -1393,29 +1393,30 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Lcharptr = Fecode; - GETCHARLEN(fc, Fecode, Flength); - Fecode += Flength; + GETCHARLEN(fc, Fecode, length); + Fecode += length; + Llength = (uint8_t)length; /* Handle multi-code-unit character matching, caseful and caseless. */ - if (Flength > 1) + if (length > 1) { uint32_t othercase; if (Fop >= OP_STARI && /* Caseless */ (othercase = UCD_OTHERCASE(fc)) != fc) - Loclength = PRIV(ord2utf)(othercase, Foccu); + Loclength = (uint8_t)PRIV(ord2utf)(othercase, Loccu); else Loclength = 0; for (i = 1; i <= Lmin; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - length && + memcmp(Feptr, Lcharptr, CU2BYTES(length)) == 0) Feptr += length; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1433,11 +1434,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RMATCH(Fecode, RM202); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1447,18 +1448,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ } - else /* Maximize */ { Lstart_eptr = Feptr; for (i = Lmin; i < Lmax; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) - Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) + Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1523,7 +1523,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1542,7 +1542,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1560,7 +1560,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); break; } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) break; Feptr++; } @@ -1585,7 +1585,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } if (Lmin == Lmax) continue; @@ -1602,7 +1602,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } PCRE2_UNREACHABLE(); /* Control never reaches here */ } @@ -1617,7 +1617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (Lc != UCHAR21TEST(Feptr)) break; + if (Lc != *Feptr) break; Feptr++; } @@ -1632,6 +1632,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } break; +#undef Llength #undef Loclength #undef Lstart_eptr #undef Lcharptr @@ -1639,6 +1640,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmax #undef Lc #undef Loc +#undef Loccu /* ===================================================================== */ @@ -1649,11 +1651,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, very much to the time taken, but character matching *is* what this is all about... */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Lstart_eptr F->fields.charnot_repeat.start_eptr +#define Lmin F->fields.charnot_repeat.min +#define Lmax F->fields.charnot_repeat.max +#define Lc F->fields.charnot_repeat.c +#define Loc F->fields.charnot_repeat.oc case OP_NOTEXACT: case OP_NOTEXACTI: @@ -2040,11 +2042,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_CLASS and OP_NCLASS occurs when a data character outside the range is encountered. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lstart_eptr F->temp_sptr[0] -#define Lbyte_map_address F->temp_sptr[1] +#define Lbyte_map_address F->fields.class_repeat.byte_map_address #define Lbyte_map ((const unsigned char *)Lbyte_map_address) +#define Lstart_eptr F->fields.class_repeat.start_eptr +#define Lmin F->fields.class_repeat.min +#define Lmax F->fields.class_repeat.max case OP_NCLASS: case OP_CLASS: @@ -2283,10 +2285,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, 32-bit libraries, codepoints greater than 255 may be encountered even when UTF is not supported. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lxclass_data F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.xclass_repeat.start_eptr +#define Lxclass_data F->fields.xclass_repeat.xclass_data +#define Lmin F->fields.xclass_repeat.min +#define Lmax F->fields.xclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_XCLASS: @@ -2424,11 +2426,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, there is complex nesting or logical operations within the character class. */ -#define Lstart_eptr F->temp_sptr[0] -#define Leclass_data F->temp_sptr[1] -#define Leclass_len F->temp_size -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.eclass_repeat.start_eptr +#define Leclass_data F->fields.eclass_repeat.eclass_data +#define Leclass_len F->fields.eclass_repeat.eclass_len +#define Lmin F->fields.eclass_repeat.min +#define Lmax F->fields.eclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_ECLASS: @@ -2657,7 +2659,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { SCHECK_PARTIAL(); } - else if (UCHAR21TEST(Feptr) == CHAR_LF) Feptr++; + else if (*Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -2908,11 +2910,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, does not need to be in a stack frame as it is not used within an RMATCH() loop. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lctype F->temp_32[2] -#define Lpropvalue F->temp_32[3] +#define Lstart_eptr F->fields.type_repeat.start_eptr +#define Lmin F->fields.type_repeat.min +#define Lmax F->fields.type_repeat.max +#define Lctype F->fields.type_repeat.ctype +#define Lpropvalue F->fields.type_repeat.propvalue case OP_TYPEEXACT: Lmin = Lmax = GET2(Fecode, 1); @@ -3271,7 +3273,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -3313,7 +3315,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -3423,7 +3425,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3440,7 +3442,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3457,7 +3459,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3474,7 +3476,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3491,7 +3493,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -4119,7 +4121,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -4732,7 +4734,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -4788,7 +4790,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc == CHAR_CR) { if (++Feptr >= mb->end_subject) break; - if (UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (*Feptr == CHAR_LF) Feptr++; } else { @@ -4960,7 +4962,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr--; BACKCHAR(Feptr); if (Lctype == OP_ANYNL && Feptr > Lstart_eptr && - UCHAR21(Feptr) == CHAR_NL && UCHAR21(Feptr - 1) == CHAR_CR) + *Feptr == CHAR_NL && Feptr[-1] == CHAR_CR) Feptr--; } } @@ -5236,17 +5238,18 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_DNREFI are used. In this case we must scan the list of groups to which the name refers, and use the first one that is set. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lcaseless F->temp_32[2] -#define Lcaseopts F->temp_32[3] -#define Lstart F->temp_sptr[0] -#define Loffset F->temp_size +#define Lstart F->fields.ref_repeat.start +#define Loffset F->fields.ref_repeat.offset +#define Llength F->fields.ref_repeat.length +#define Lmin F->fields.ref_repeat.min +#define Lmax F->fields.ref_repeat.max +#define Lcaseless F->byte1 +#define Lcaseopts F->byte2 case OP_DNREF: case OP_DNREFI: - Lcaseless = (Fop == OP_DNREFI); - Lcaseopts = (Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0; + Lcaseless = (uint8_t)(Fop == OP_DNREFI); + Lcaseopts = (uint8_t)((Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0); { int count = GET2(Fecode, 1+IMM2_SIZE); PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size; @@ -5281,6 +5284,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: + case OP_CRPOSSTAR: + case OP_CRPOSPLUS: + case OP_CRPOSQUERY: fc = *Fecode++ - OP_CRSTAR; Lmin = rep_min[fc]; Lmax = rep_max[fc]; @@ -5289,6 +5295,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRRANGE: case OP_CRMINRANGE: + case OP_CRPOSRANGE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); reptype = rep_typ[*Fecode - OP_CRSTAR]; @@ -5376,7 +5383,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { BOOL samelengths = TRUE; Lstart = Feptr; /* Starting position */ - Flength = Fovector[Loffset+1] - Fovector[Loffset]; + Llength = Fovector[Loffset+1] - Fovector[Loffset]; for (i = Lmin; i < Lmax; i++) { @@ -5396,10 +5403,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (slength != Flength) samelengths = FALSE; + if (slength != Llength) samelengths = FALSE; Feptr += slength; } + /* No recursion if the repeat type is possessive. */ + if (reptype == REPTYPE_POS) break; + /* If the length matched for each repetition is the same as the length of the captured group, we can easily work backwards. This is the normal case. However, in caseless UTF-8 mode there are pairs of case-equivalent @@ -5412,7 +5422,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { RMATCH(Fecode, RM21); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Feptr -= Flength; + Feptr -= Llength; } } @@ -5443,12 +5453,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */ -#undef Lcaseless -#undef Lmin -#undef Lmax #undef Lstart #undef Loffset - +#undef Llength +#undef Lmin +#undef Lmax +#undef Lcaseless +#undef Lcaseopts /* ========================================================================= */ @@ -5475,30 +5486,37 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO. Possessive groups with possible zero repeats are preceded by BRAPOSZERO. */ -#define Lnext_ecode F->temp_sptr[0] - case OP_BRAZERO: - Lnext_ecode = Fecode + 1; - RMATCH(Lnext_ecode, RM9); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - Fecode = Lnext_ecode + 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode; + + Fecode++; + RMATCH(Fecode, RM9); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; case OP_BRAMINZERO: - Lnext_ecode = Fecode + 1; - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - RMATCH(Lnext_ecode + 1 + LINK_SIZE, RM10); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode++; - break; + { + PCRE2_SPTR next_ecode; -#undef Lnext_ecode + Fecode++; + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + RMATCH(next_ecode + 1 + LINK_SIZE, RM10); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + } + break; case OP_SKIPZERO: - Fecode++; - do Fecode += GET(Fecode,1); while (*Fecode == OP_ALT); - Fecode += 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode = Fecode + 1; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; @@ -5507,11 +5525,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, brackets will always be OP_KETRPOS, which returns MATCH_KETRPOS without going further in the pattern. */ -#define Lframe_type F->temp_32[0] -#define Lmatched_once F->temp_32[1] -#define Lzero_allowed F->temp_32[2] -#define Lstart_eptr F->temp_sptr[0] -#define Lstart_group F->temp_sptr[1] +#define Lstart_eptr F->fields.op_brapos.start_eptr +#define Lstart_group F->fields.op_brapos.start_group +#define Lframe_type F->fields.op_brapos.frame_type +#define Lmatched_once F->byte1 +#define Lzero_allowed F->byte2 case OP_BRAPOSZERO: Lzero_allowed = TRUE; /* Zero repeat is allowed */ @@ -5583,11 +5601,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RRETURN(MATCH_NOMATCH); -#undef Lmatched_once -#undef Lzero_allowed -#undef Lframe_type #undef Lstart_eptr #undef Lstart_group +#undef Lframe_type +#undef Lmatched_once +#undef Lzero_allowed /* ===================================================================== */ @@ -5599,8 +5617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, however, because that would make handling assertions and once-only brackets messier when there is nothing to go back to. */ -#define Lframe_type F->temp_32[0] /* Set for all that use GROUPLOOP */ -#define Lnext_branch F->temp_sptr[0] /* Used only in OP_BRA handling */ +#define Lframe_type F->fields.op_bra.frame_type case OP_BRA: if (mb->hasthen || Frdepth == 0) @@ -5611,24 +5628,31 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, for (;;) { - Lnext_branch = Fecode + GET(Fecode, 1); - if (*Lnext_branch != OP_ALT) break; + PCRE2_SPTR current_branch = Fecode; + PCRE2_SPTR next_branch = current_branch + GET(current_branch, 1); + + if (*next_branch != OP_ALT) break; /* This is never the final branch. We do not need to test for MATCH_THEN here because this code is not used when there is a THEN in the pattern. */ - RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM1); + Fecode = next_branch; + PCRE2_ASSERT((*current_branch == OP_BRA || *current_branch == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + + RMATCH(current_branch + 1 + LINK_SIZE, RM1); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode = Lnext_branch; } /* Hit the start of the final branch. Continue at this level. */ - Fecode += PRIV(OP_lengths)[*Fecode]; + PCRE2_ASSERT((*Fecode == OP_BRA || *Fecode == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + Fecode += 1 + LINK_SIZE; break; -#undef Lnext_branch - /* ===================================================================== */ /* Handle a capturing bracket, other than those that are possessive with an @@ -5647,7 +5671,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_ONCE: case OP_SCRIPT_RUN: case OP_SBRA: - Lframe_type = GF_NOCAPTURE | Fop; + Lframe_type = GF_NOCAPTURE; GROUPLOOP: for (;;) @@ -5677,8 +5701,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, subpatterns. For a whole-pattern recursion, we have to infer the number zero. */ -#define Lframe_type F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] +#define Lstart_branch F->fields.op_recurse.start_branch +#define Lframe_type F->fields.op_recurse.frame_type case OP_RECURSE: bracode = mb->start_code + GET(Fecode, 1); @@ -5752,8 +5776,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ -#undef Lframe_type #undef Lstart_branch +#undef Lframe_type /* ===================================================================== */ @@ -5762,16 +5786,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, treated as NOMATCH. (*ACCEPT) is treated as successful assertion, with its captures and mark retained. Any other return is an error. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT: case OP_ASSERTBACK: case OP_ASSERT_NA: case OP_ASSERTBACK_NA: - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM3); if (rrc == MATCH_ACCEPT) { @@ -5791,22 +5812,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type - /* ===================================================================== */ /* Handle negative assertions. Loop for each non-matching branch as for positive assertions. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT_NOT: case OP_ASSERTBACK_NOT: - Lframe_type = GF_NOCAPTURE | Fop; - for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM4); switch(rrc) { @@ -5839,22 +5854,20 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type /* ===================================================================== */ /* Handle scan substring operation. */ -#define Lframe_type F->temp_32[0] -#define Lextra_size F->temp_32[1] -#define Lsaved_moptions F->temp_32[2] -#define Lsaved_end_subject F->temp_sptr[0] -#define Lsaved_eptr F->temp_sptr[1] -#define Ltrue_end_extra F->temp_size +#define Lsaved_end_subject F->fields.op_assert_scs.saved_end_subject +#define Lsaved_eptr F->fields.op_assert_scs.saved_eptr +#define Ltrue_end_extra F->fields.op_assert_scs.true_end_extra +#define Lextra_size F->fields.op_assert_scs.extra_size +#define Lsaved_moptions F->fields.op_assert_scs.saved_moptions case OP_ASSERT_SCS: + length = 0; { PCRE2_SPTR ecode = Fecode + 1 + LINK_SIZE; - uint32_t extra_size = 0; int count; PCRE2_SPTR slot; @@ -5866,7 +5879,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; offset = (GET2(ecode, 1) << 1) - 2; ecode += 1+IMM2_SIZE; if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET) @@ -5878,7 +5891,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, count = GET2(ecode, 1 + IMM2_SIZE); slot = mb->name_table + GET2(ecode, 1) * mb->name_entry_size; - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; while (count > 0) @@ -5898,18 +5911,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; ecode += 1+IMM2_SIZE; } else if (*ecode == OP_DNCREF) { - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; } else break; } - - Lextra_size = extra_size; } Lsaved_end_subject = mb->end_subject; @@ -5922,11 +5933,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->start_subject + Fovector[offset + 1]; mb->moptions &= ~PCRE2_NOTEOL; - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; - RMATCH(Fecode + 1 + LINK_SIZE + Lextra_size, RM38); + group_frame_type = GF_NOCAPTURE; + RMATCH(Fecode + 1 + LINK_SIZE + length, RM38); if (rrc == MATCH_ACCEPT) { memcpy(Fovector, @@ -5956,7 +5966,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->moptions = Lsaved_moptions; RRETURN(MATCH_NOMATCH); } - Lextra_size = 0; + length = 0; } do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT); @@ -5964,13 +5974,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr = Lsaved_eptr; break; -#undef Lframe_type -#undef Lextra_size #undef Lsaved_end_subject #undef Lsaved_eptr #undef Ltrue_end_extra +#undef Lextra_size #undef Lsave_moptions + /* ===================================================================== */ /* The callout item calls an external function, if one is provided, passing details of the match so far. This is mainly for debugging, though the @@ -5991,18 +6001,22 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, past the end of the item if there is only one branch, but that's exactly what we want. */ +#define Lstart_branch F->fields.op_cond.start_branch +#define Llength F->fields.op_cond.length +#define Lpositive F->byte1 + case OP_COND: case OP_SCOND: - /* The variable Flength will be added to Fecode when the condition is + /* The variable Llength will be added to Fecode when the condition is false, to get to the second branch. Setting it to the offset to the ALT or KET, then incrementing Fecode achieves this effect. However, if the second branch is non-existent, we must point to the KET so that the end of the group is correctly processed. We now have Fecode pointing to the condition or callout. */ - Flength = GET(Fecode, 1); /* Offset to the second branch */ - if (Fecode[Flength] != OP_ALT) Flength -= 1 + LINK_SIZE; + Llength = GET(Fecode, 1); /* Offset to the second branch */ + if (Fecode[Llength] != OP_ALT) Llength -= 1 + LINK_SIZE; Fecode += 1 + LINK_SIZE; /* From this opcode */ /* Because of the way auto-callout works during compile, a callout item is @@ -6016,10 +6030,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (rrc < 0) RRETURN(rrc); /* Advance Fecode past the callout, so it now points to the condition. We - must adjust Flength so that the value of Fecode+Flength is unchanged. */ + must adjust Llength so that the value of Fecode+Llength is unchanged. */ Fecode += length; - Flength -= length; + Llength -= length; } /* Test the various possible conditions */ @@ -6080,16 +6094,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* The condition is an assertion. Run code similar to the assertion code above. */ -#define Lpositive F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] default: - Lpositive = (*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); + Lpositive = (uint8_t)(*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); Lstart_branch = Fecode; for (;;) { - group_frame_type = GF_CONDASSERT | *Fecode; + group_frame_type = GF_CONDASSERT; RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM5); switch(rrc) @@ -6142,12 +6154,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; /* End of assertion condition */ } -#undef Lpositive -#undef Lstart_branch - /* Choose branch according to the condition. */ - Fecode += condition? PRIV(OP_lengths)[*Fecode] : Flength; + Fecode += condition? PRIV(OP_lengths)[*Fecode] : Llength; /* If the opcode is OP_SCOND it means we are at a repeated conditional group that might match an empty string. We must therefore descend a level @@ -6156,12 +6165,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (Fop == OP_SCOND) { - group_frame_type = GF_NOCAPTURE | Fop; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode, RM35); RRETURN(rrc); } break; +#undef Lstart_branch +#undef Llength +#undef Lpositive /* ========================================================================= */ @@ -6215,14 +6227,12 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, the start to move back even the minimum amount, fail. When working with UTF-8 we move back a number of characters, not bytes. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Leptr F->temp_sptr[0] +#define Lmin F->fields.op_vreverse.min +#define Lmax F->fields.op_vreverse.max case OP_VREVERSE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); - Leptr = Feptr; /* Move back by the maximum branch length and then work forwards. This ensures that items such as \d{3,5} get the maximum length, which is @@ -6273,7 +6283,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmin #undef Lmax -#undef Leptr + /* ===================================================================== */ /* An alternation is the end of a branch; scan along to find the end of the @@ -6328,7 +6338,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, N so that they are set on return. Doing this for all assertions, both positive and negative, seems to match what Perl does. */ - if (GF_IDMASK(N->group_frame_type) == GF_CONDASSERT) + if (N->group_frame_type == GF_CONDASSERT) { if ((*bracode == OP_ASSERTBACK || *bracode == OP_ASSERTBACK_NOT) && branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr) @@ -6451,14 +6461,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, pattern. */ case OP_ASSERT_SCS: - F->temp_sptr[0] = mb->end_subject; - mb->end_subject = P->temp_sptr[0]; - mb->true_end_subject = mb->end_subject + P->temp_size; - Feptr = P->temp_sptr[1]; + F->fields.op_assert_scs.saved_end_subject = mb->end_subject; + mb->end_subject = P->fields.op_assert_scs.saved_end_subject; + mb->true_end_subject = mb->end_subject + P->fields.op_assert_scs.true_end_extra; + Feptr = P->fields.op_assert_scs.saved_eptr; RMATCH(Fecode + 1 + LINK_SIZE, RM39); - mb->end_subject = F->temp_sptr[0]; + mb->end_subject = F->fields.op_assert_scs.saved_end_subject; mb->true_end_subject = mb->end_subject; RRETURN(rrc); break; @@ -6599,7 +6609,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6647,7 +6657,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6995,10 +7005,6 @@ PCRE2_SPTR req_cu_ptr; PCRE2_SPTR start_partial; PCRE2_SPTR match_partial; -#ifdef SUPPORT_JIT -BOOL use_jit; -#endif - /* This flag is needed even when Unicode is not supported for convenience (it is used by the IS_NEWLINE macro). */ @@ -7008,9 +7014,6 @@ BOOL utf = FALSE; BOOL ucp = FALSE; BOOL allow_invalid; uint32_t fragment_options = 0; -#ifdef SUPPORT_JIT -BOOL jit_checked_utf = FALSE; -#endif #endif /* SUPPORT_UNICODE */ PCRE2_SIZE frame_size; @@ -7073,15 +7076,6 @@ options |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1))); #undef FF #undef OO -/* If the pattern was successfully studied with JIT support, we will run the -JIT executable instead of the rest of this function. Most options must be set -at compile time for the JIT code to be usable. */ - -#ifdef SUPPORT_JIT -use_jit = (re->executable_jit != NULL && - (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0); -#endif - /* Initialize UTF/UCP parameters. */ #ifdef SUPPORT_UNICODE @@ -7128,20 +7122,25 @@ match_data->startchar = 0; /* ============================= JIT matching ============================== */ -/* Prepare for JIT matching. Check a UTF string for validity unless no check is -requested or invalid UTF can be handled. We check only the portion of the -subject that might be be inspected during matching - from the offset minus the -maximum lookbehind to the given length. This saves time when a small part of a -large subject is being matched by the use of a starting offset. Note that the -maximum lookbehind is a number of characters, not code units. */ +/* If the pattern was successfully studied with JIT support, we will run the +JIT executable instead of the rest of this function. Most options must be set +at compile time for the JIT code to be usable. */ #ifdef SUPPORT_JIT -if (use_jit) +if (re->executable_jit != NULL && + (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0 && + PRIV(jit_check_exec)(re->executable_jit, options)) { + /* Prepare for JIT matching. Check a UTF string for validity unless no check + is requested or invalid UTF can be handled. We check only the portion of the + subject that might be be inspected during matching - from the offset minus + the maximum lookbehind to the given length. This saves time when a small part + of a large subject is being matched by the use of a starting offset. Note that + the maximum lookbehind is a number of characters, not code units. */ + #ifdef SUPPORT_UNICODE if (utf && (options & PCRE2_NO_UTF_CHECK) == 0 && !allow_invalid) { - /* For 8-bit and 16-bit UTF, check that the first code unit is a valid character start. */ @@ -7194,40 +7193,36 @@ if (use_jit) match_data->startchar += start_match - subject; return match_data->rc = rc; } - jit_checked_utf = TRUE; } #endif /* SUPPORT_UNICODE */ - /* If JIT returns BADOPTION, which means that the selected complete or - partial matching mode was not compiled, fall through to the interpreter. */ - rc = pcre2_jit_match(code, subject, length, start_offset, options, match_data, mcontext); - if (rc != PCRE2_ERROR_JIT_BADOPTION) + /* JIT must be able to perform the match. */ + PCRE2_ASSERT(rc != PCRE2_ERROR_JIT_BADOPTION); + + match_data->options = original_options; + if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) { - match_data->options = original_options; - if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) + if (length != 0) { - if (length != 0) - { - match_data->subject = match_data->memctl.malloc(CU2BYTES(length), - match_data->memctl.memory_data); - if (match_data->subject == NULL) - return match_data->rc = PCRE2_ERROR_NOMEMORY; - memcpy((void *)match_data->subject, subject, CU2BYTES(length)); - } - else - match_data->subject = NULL; - match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + match_data->subject = match_data->memctl.malloc(CU2BYTES(length), + match_data->memctl.memory_data); + if (match_data->subject == NULL) + return match_data->rc = PCRE2_ERROR_NOMEMORY; + memcpy((void *)match_data->subject, subject, CU2BYTES(length)); } else - { - /* When pcre2_jit_match sets the subject, it doesn't know what the - original passed-in pointer was. */ - if (match_data->subject != NULL) match_data->subject = original_subject; - } - return rc; + match_data->subject = NULL; + match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + } + else + { + /* When pcre2_jit_match sets the subject, it doesn't know what the + original passed-in pointer was. */ + if (match_data->subject != NULL) match_data->subject = original_subject; } + return rc; } #endif /* SUPPORT_JIT */ @@ -7240,12 +7235,8 @@ this. */ mb->check_subject = subject; -/* If a UTF subject string was not checked for validity in the JIT code above, -check it here, and handle support for invalid UTF strings. The check above -happens only when invalid UTF is not supported and PCRE2_NO_CHECK_UTF is unset. -If we get here in those circumstances, it means the subject string is valid, -but for some reason JIT matching was not successful. There is no need to check -the subject again. +/* Check the validity of UTF subject strings. The check happens only when +PCRE2_NO_CHECK_UTF is unset. We check only the portion of the subject that might be be inspected during matching - from the offset minus the maximum lookbehind to the given length. @@ -7257,11 +7248,7 @@ Note also that support for invalid UTF forces a check, overriding the setting of PCRE2_NO_CHECK_UTF. */ #ifdef SUPPORT_UNICODE -if (utf && -#ifdef SUPPORT_JIT - !jit_checked_utf && -#endif - ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) +if (utf && ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) { #if PCRE2_CODE_UNIT_WIDTH != 32 BOOL skipped_bad_start = FALSE; @@ -7649,7 +7636,7 @@ for(;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -7681,7 +7668,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -7741,7 +7728,7 @@ for(;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else @@ -7796,7 +7783,7 @@ for(;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -7810,7 +7797,7 @@ for(;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -7884,7 +7871,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -7905,7 +7892,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ diff --git a/src/pcre2_serialize.c b/src/pcre2_serialize.c index f10a3fa..725b540 100644 --- a/src/pcre2_serialize.c +++ b/src/pcre2_serialize.c @@ -166,9 +166,10 @@ const pcre2_memctl *memctl = (gcontext != NULL) ? &gcontext->memctl : &PRIV(default_compile_context).memctl; const uint8_t *src_bytes; -pcre2_real_code *dst_re; +pcre2_real_code *dst_re = NULL; uint8_t *tables; int32_t i, j; +int32_t error; /* Sanity checks. */ @@ -206,7 +207,10 @@ for (i = 0; i < number_of_codes; i++) memcpy(&blocksize, src_bytes + offsetof(pcre2_real_code, blocksize), sizeof(CODE_BLOCKSIZE_TYPE)); if (blocksize <= sizeof(pcre2_real_code)) - return PCRE2_ERROR_BADSERIALIZEDDATA; + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* The allocator provided by gcontext replaces the original one. */ @@ -214,13 +218,8 @@ for (i = 0; i < number_of_codes; i++) (pcre2_memctl *)gcontext); if (dst_re == NULL) { - memctl->free(tables, memctl->memory_data); - for (j = 0; j < i; j++) - { - memctl->free(codes[j], memctl->memory_data); - codes[j] = NULL; - } - return PCRE2_ERROR_NOMEMORY; + error = PCRE2_ERROR_NOMEMORY; + goto cleanup; } /* The new allocator must be preserved. */ @@ -230,10 +229,10 @@ for (i = 0; i < number_of_codes; i++) if (dst_re->magic_number != MAGIC_NUMBER || dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 || dst_re->name_count > MAX_NAME_COUNT) - { - memctl->free(dst_re, memctl->memory_data); - return PCRE2_ERROR_BADSERIALIZEDDATA; - } + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* At the moment only one table is supported. */ @@ -242,10 +241,22 @@ for (i = 0; i < number_of_codes; i++) dst_re->flags |= PCRE2_DEREF_TABLES; codes[i] = dst_re; + dst_re = NULL; src_bytes += blocksize; } return number_of_codes; + +cleanup: +if (dst_re != NULL) + memctl->free(dst_re, memctl->memory_data); +memctl->free(tables, memctl->memory_data); +for (j = 0; j < i; j++) + { + memctl->free(codes[j], memctl->memory_data); + codes[j] = NULL; + } +return error; } diff --git a/src/pcre2_substitute.c b/src/pcre2_substitute.c index 5cb8474..d512f69 100644 --- a/src/pcre2_substitute.c +++ b/src/pcre2_substitute.c @@ -115,6 +115,7 @@ for (; ptr < ptrend; ptr++) int erc; int errorcode; uint32_t ch; + PCRE2_SPTR esc_end_ptr; if (ptr < ptrend - 1) switch (ptr[1]) { @@ -137,6 +138,9 @@ for (; ptr < ptrend; ptr++) goto EXIT; } + esc_end_ptr = ptr; + ptr -= 1; /* Rewind by one, because the for-loop will increment it */ + switch(erc) { case 0: /* Data character */ @@ -160,7 +164,8 @@ for (; ptr < ptrend; ptr++) default: if (erc < 0) - break; /* capture group reference */ + break; /* capture group reference */ + ptr = esc_end_ptr; rc = PCRE2_ERROR_BADREPESCAPE; goto EXIT; } @@ -751,6 +756,7 @@ BOOL overflowed = FALSE; BOOL use_existing_match; BOOL replacement_only; BOOL utf = (code->overall_options & PCRE2_UTF) != 0; +BOOL partial = (options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0; PCRE2_UCHAR temp[6]; PCRE2_UCHAR null_str[1] = { 0xcd }; PCRE2_SPTR original_subject = subject; @@ -778,10 +784,16 @@ if (mcontext != NULL) substitute_case_callout_data = mcontext->substitute_case_callout_data; } -/* Partial matching is not valid. This must come after setting *blength to -PCRE2_UNSET, so as not to imply an offset in the replacement. */ +/* Partial matching is supported, with limitations. We allow matching in partial +mode, however, if a partial match is found, the substitution will fail with a +PCRE2_ERROR_PARTIAL error. Additionally, outputting the after-match text is not +allowed (PCRE2_ERROR_BADOPTION), and certain replacement items such as $' and $_ +are not supported (PCRE2_ERROR_PARTIALSUBS). + +This must come after setting *blength to PCRE2_UNSET, so as not to imply an +offset in the replacement. */ -if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) +if (partial && (options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) == 0) return PCRE2_ERROR_BADOPTION; /* Validate length and find the end of the replacement. A NULL replacement of @@ -854,7 +866,8 @@ if (use_existing_match) if (start_offset != match_data->start_offset) return PCRE2_ERROR_DIFFSUBSOFFSET; - if ((options & ~SUBSTITUTE_OPTIONS) != match_data->options) + if ((options & ~(SUBSTITUTE_OPTIONS|PCRE2_NO_UTF_CHECK)) != + (match_data->options & ~PCRE2_NO_UTF_CHECK)) return PCRE2_ERROR_DIFFSUBSOPTIONS; } @@ -1119,8 +1132,16 @@ for (;;) if (next == CHAR_GRAVE_ACCENT || next == CHAR_APOSTROPHE) { ++ptr; + + /* (Sanity-check ovector before reading from it.) */ rc = pcre2_substring_length_bynumber(match_data, 0, &sublength); - if (rc < 0) goto PTREXIT; /* (Sanity-check ovector before reading from it.) */ + /* LCOV_EXCL_START */ + if (rc < 0) + { + PCRE2_DEBUG_UNREACHABLE(); + goto PTREXIT; + } + /* LCOV_EXCL_STOP */ if (next == CHAR_GRAVE_ACCENT) { @@ -1129,6 +1150,12 @@ for (;;) } else { + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject + ovector[1]; subptrend = subject + length; } @@ -1139,12 +1166,19 @@ for (;;) { /* Java, .NET support $_ for "entire input string". */ ++ptr; + + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject; subptrend = subject + length; goto SUBPTR_SUBSTITUTE; } - else if (next == CHAR_PLUS && - !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) + if (next == CHAR_PLUS && + !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) { /* Perl supports $+ for "highest captured group" (not the same as $^N which is mainly only useful inside Perl's match callbacks). We also diff --git a/src/pcre2_substring.c b/src/pcre2_substring.c index f68b464..a6f5277 100644 --- a/src/pcre2_substring.c +++ b/src/pcre2_substring.c @@ -210,9 +210,10 @@ PCRE2_SIZE size; PCRE2_UCHAR *yield; rc = pcre2_substring_length_bynumber(match_data, stringnumber, &size); if (rc < 0) return rc; -yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (size + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)match_data); -if (yield == NULL) return PCRE2_ERROR_NOMEMORY; +if (size > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / CU2BYTES(1)) - 1 || + (yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(size + 1), (pcre2_memctl *)match_data)) == NULL) + return PCRE2_ERROR_NOMEMORY; yield = (PCRE2_UCHAR *)(((char *)yield) + sizeof(pcre2_memctl)); if (size != 0) memcpy(yield, match_data->subject + match_data->ovector[stringnumber*2], CU2BYTES(size)); diff --git a/src/pcre2_ucd.c b/src/pcre2_ucd.c index 1cbff3a..7b294a8 100644 --- a/src/pcre2_ucd.c +++ b/src/pcre2_ucd.c @@ -77,9 +77,9 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = {0}; const uint32_t PRIV(ucd_nocase_ranges_size) = 0; #else -/* Total size: 116564 bytes, block size: 128. */ +/* Total size: 116548 bytes, block size: 128. */ -const char *PRIV(unicode_version) = "16.0.0"; +const char *PRIV(unicode_version) = "17.0.0"; /* When recompiling tables with a new Unicode version, please check the types in this structure definition with those in pcre2_internal.h (the actual field @@ -200,20 +200,21 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = { 0x10d65, 0x10d70, /* 10 */ 0x10d85, 0x118a0, /* 2842 */ 0x118df, 0x16e40, /* 21856 */ - 0x16e7f, 0x1e900, /* 31360 */ + 0x16e7f, 0x16ea0, /* 32 */ + 0x16ed3, 0x1e900, /* 31276 */ 0x1e943, 0x110000, /* 988860 */ 0xffffffff, 0xffffffff /* terminator */ }; -/* Total: 1110933 characters. */ -const uint32_t PRIV(ucd_nocase_ranges_size) = 80; +/* Total: 1110881 characters. */ +const uint32_t PRIV(ucd_nocase_ranges_size) = 82; /* This table lists the code points for the '9' characters in each set of decimal digits. It is used to ensure that all the digits in a script run come from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { - 76, /* Number of subsequent values */ + 77, /* Number of subsequent values */ 0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef, 0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9, 0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89, @@ -221,9 +222,9 @@ const uint32_t PRIV(ucd_digit_sets)[] = { 0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x10d49, 0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9, 0x116d9, 0x116e3, 0x11739, 0x118e9, 0x11959, 0x11bf9, 0x11c59, - 0x11d59, 0x11da9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, 0x16d79, - 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, - 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, + 0x11d59, 0x11da9, 0x11de9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, + 0x16d79, 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, + 0x1e2f9, 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, }; /* This vector is a list of script bitsets for the Script Extension property. @@ -232,60 +233,60 @@ ucd_script_sets_item_size. */ const uint32_t PRIV(ucd_script_sets)[] = { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x40200003u, 0x00381901u, 0x00100246u, 0x00000000u, - 0x00040305u, 0x00800000u, 0x08000000u, 0x00000000u, + 0x40200003u, 0x00381901u, 0x00200246u, 0x00000000u, + 0x00040305u, 0x00800000u, 0x10000000u, 0x00000000u, 0x20000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800000u, 0x00000000u, 0x00000000u, 0x00040001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01000007u, 0x00000840u, 0x80000200u, 0x00000000u, - 0x01000007u, 0x00000040u, 0x80010000u, 0x00000001u, + 0x01000007u, 0x00000840u, 0x00000200u, 0x00000001u, + 0x01000007u, 0x00000040u, 0x00020000u, 0x00000003u, 0x01000005u, 0x00002000u, 0x00000000u, 0x00000000u, - 0x00040041u, 0x00001000u, 0x80000000u, 0x00000000u, - 0x01000047u, 0x00002801u, 0x00010001u, 0x00000001u, + 0x00040041u, 0x00001000u, 0x00000000u, 0x00000001u, + 0x01000047u, 0x00002801u, 0x00020001u, 0x00000002u, 0x10000001u, 0x00001801u, 0x00000004u, 0x00000000u, - 0x00000007u, 0x00000000u, 0x00000200u, 0x00000000u, - 0x00000051u, 0x00002840u, 0x00000202u, 0x00000001u, - 0x0000005fu, 0x00000041u, 0x00000202u, 0x00000000u, + 0x00000007u, 0x00002000u, 0x00000200u, 0x00000000u, + 0x00000051u, 0x00002840u, 0x00000202u, 0x00000002u, + 0x0000005fu, 0x00002041u, 0x00000202u, 0x00000000u, 0x00000001u, 0x00002000u, 0x00000000u, 0x00000000u, 0x00000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x01000005u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x01000005u, 0x00000000u, 0x00020000u, 0x00000000u, 0x01000001u, 0x00000040u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000005u, 0x00000000u, 0x00000000u, 0x00000001u, - 0x00000003u, 0x00000000u, 0x00000200u, 0x00000001u, - 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x11000041u, 0x00000000u, 0x00000002u, 0x00000000u, + 0x00000005u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00000003u, 0x00000000u, 0x00000200u, 0x00000002u, + 0x11000041u, 0x00002000u, 0x00000002u, 0x00000000u, 0x01000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x00000041u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000001u, 0x01000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01040001u, 0x00000001u, 0x80000001u, 0x00000000u, + 0x01040041u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00010000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00000001u, 0x00000001u, + 0x00000001u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000800u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00000000u, 0x00000200u, 0x00000000u, 0x00000004u, 0x00001000u, 0x00000000u, 0x00000000u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00200008u, 0x00001000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11200000u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22400000u, 0x00000000u, 0x000000e0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11208000u, 0x00000000u, - 0x00000060u, 0x08000000u, 0x04608480u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22408000u, 0x00000000u, + 0x00000060u, 0x08000000u, 0x08c08480u, 0x00000000u, 0x00000060u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000a0u, 0x00000000u, 0x01000000u, 0x00000000u, - 0x00000020u, 0x00000000u, 0x00200000u, 0x00000000u, - 0x0001ff01u, 0x40000000u, 0x00001008u, 0x00000000u, - 0x0001ff01u, 0x00000000u, 0x00001008u, 0x00000000u, - 0x0003ff00u, 0x80004000u, 0x409c1848u, 0x00000000u, - 0x0003ff00u, 0x80004020u, 0x609c1848u, 0x00000000u, - 0x00000100u, 0x04000000u, 0x00080040u, 0x00000000u, + 0x000000a0u, 0x00000000u, 0x02000000u, 0x00000000u, + 0x00000020u, 0x00000000u, 0x00400000u, 0x00000000u, + 0x0001ff01u, 0x40000000u, 0x01011008u, 0x00000000u, + 0x0001ff01u, 0x00000000u, 0x00011008u, 0x00000000u, + 0x0003ff00u, 0x80004000u, 0x81381848u, 0x00000000u, + 0x0003ff00u, 0x80004020u, 0xc1381848u, 0x00000000u, + 0x00000100u, 0x04000000u, 0x00100040u, 0x00000000u, 0x00000200u, 0x10004000u, 0x00000000u, 0x00000000u, 0x00000400u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000800u, 0x00000000u, 0x00000010u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008000u, 0x00000000u, 0x00800000u, 0x00000002u, + 0x00008000u, 0x00000000u, 0x01000000u, 0x00000004u, 0x00100000u, 0x10000040u, 0x00000000u, 0x00000000u, 0x00200001u, 0x00001000u, 0x00000000u, 0x00000000u, 0x02000000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -294,15 +295,23 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00008300u, 0x00000000u, 0x00000008u, 0x00000000u, 0x00000100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00008100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00010000u, 0x00000000u, 0x00000100u, 0x40000000u, 0x00000000u, 0x00000000u, 0x0001f100u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000100u, 0x00000000u, 0x00800000u, 0x00000000u, - 0x0003d300u, 0x00000000u, 0x00801008u, 0x00000002u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x01010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x0003d300u, 0x00000000u, 0x01001008u, 0x00000004u, 0x00000100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008100u, 0x00000000u, 0x00000008u, 0x00000002u, + 0x00008100u, 0x00000000u, 0x00000008u, 0x00000004u, 0x00000200u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x00800000u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x01000000u, 0x00000000u, 0x00000045u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000040u, 0x00000000u, 0x00000000u, 0x00000000u, 0x04000001u, 0x00008000u, 0x00000000u, 0x00000000u, @@ -315,7 +324,7 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00200000u, 0x04780000u, 0x00004000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000000u, 0x00000020u, 0x00000000u, 0x0000c000u, 0x00000000u, - 0x40000000u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x40000000u, 0x00000000u, 0x00040000u, 0x00000000u, 0xfc400000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xfc400000u, 0x00008000u, 0x00000000u, 0x00000000u, 0x78400000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -327,21 +336,21 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x18000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x58000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x40000001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00018d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00008d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00000d00u, 0x84000000u, 0x00081950u, 0x00000000u, - 0x00000d00u, 0xc4000000u, 0x00081950u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00018d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00008d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00000d00u, 0x84000000u, 0x00101950u, 0x00000000u, + 0x00000d00u, 0xc4000000u, 0x00101950u, 0x00000000u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00002100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00100001u, 0x00020000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01000400u, 0x00000000u, 0x00000000u, 0x00000020u, 0x00010000u, 0x00000000u, 0x00000000u, 0x000000a0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000280u, 0x02000000u, 0x00000000u, + 0x00000000u, 0x00000280u, 0x04000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000020u, 0x00000000u, 0x00000020u, 0x00000800u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x04000080u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x08000080u, 0x00000000u, }; /* This vector is a list of bitsets for Boolean properties. The number of @@ -444,6 +453,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00802004u, 0x01800003u, 0x00800344u, 0x01900003u, 0x03008000u, 0x00800009u, + 0x00804004u, 0x0180000bu, 0x00c00000u, 0x00000000u, 0x01002020u, 0x00a00009u, 0x01000024u, 0x0180000bu, @@ -451,7 +461,6 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01408024u, 0x00800009u, 0x00808000u, 0x00000000u, 0x00800044u, 0x01820043u, - 0x00800064u, 0x01820043u, 0x01002020u, 0x00800011u, 0x00022020u, 0x00800019u, 0x00002028u, 0x00000800u, @@ -467,6 +476,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00002020u, 0x00000080u, 0x00002000u, 0x00000000u, 0x00006020u, 0x00000000u, + 0x00800064u, 0x01820043u, 0x40800000u, 0x00000080u, 0x40801000u, 0x00000080u, 0x40800010u, 0x00000080u, @@ -485,13 +495,11 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00801000u, 0x00000480u, 0x00b10000u, 0x00000400u, 0x00804010u, 0x00000400u, - 0x00a00000u, 0x00000400u, 0x00000000u, 0x00000400u, 0x008003c4u, 0x00100000u, 0x00a103c4u, 0x00100000u, 0x00800d44u, 0x00000040u, 0x00b10000u, 0x00000480u, - 0x00a00000u, 0x00000480u, 0x00a90000u, 0x00000400u, 0x00b90000u, 0x00000400u, 0x03000020u, 0x00800009u, @@ -528,9 +536,9 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01400020u, 0x00800009u, 0x01000020u, 0x0080000du, 0x01008004u, 0x00800009u, + 0x00c00024u, 0x01800007u, 0x01000000u, 0x00800009u, 0xc0800000u, 0x00000080u, - 0x00a00000u, 0x00000000u, 0x00b10000u, 0x00000000u, 0x00200000u, 0x00000000u, 0x00800044u, 0x00100000u, @@ -549,66 +557,66 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero (32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed into a 16-bit field, and offset in binary properties table (16 bits). */ -const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ - { 99, 0, 2, 0, 0, 6144, 2, }, /* 0 */ - { 99, 0, 2, 0, 0, 43008, 4, }, /* 1 */ - { 99, 0, 1, 0, 0, 4096, 4, }, /* 2 */ - { 99, 0, 2, 0, 0, 45056, 4, }, /* 3 */ - { 99, 0, 0, 0, 0, 4096, 4, }, /* 4 */ - { 99, 0, 2, 0, 0, 4096, 2, }, /* 5 */ - { 99, 0, 2, 0, 0, 43008, 2, }, /* 6 */ - { 99, 29, 12, 0, 0, 45056, 6, }, /* 7 */ - { 99, 21, 12, 0, 0, 28672, 8, }, /* 8 */ - { 99, 21, 12, 0, 0, 28672, 10, }, /* 9 */ - { 99, 21, 12, 0, 0, 14336, 12, }, /* 10 */ - { 99, 23, 12, 0, 0, 14336, 14, }, /* 11 */ - { 99, 21, 12, 0, 0, 14336, 14, }, /* 12 */ - { 99, 21, 12, 0, 0, 28672, 14, }, /* 13 */ - { 99, 21, 12, 0, 0, 28672, 16, }, /* 14 */ - { 99, 22, 12, 0, 0, 28672, 18, }, /* 15 */ - { 99, 18, 12, 0, 0, 28672, 18, }, /* 16 */ - { 99, 21, 12, 0, 0, 28672, 12, }, /* 17 */ - { 99, 25, 12, 0, 0, 12288, 20, }, /* 18 */ - { 99, 21, 12, 0, 0, 8192, 22, }, /* 19 */ - { 99, 17, 12, 0, 0, 12288, 24, }, /* 20 */ - { 99, 21, 12, 0, 0, 8192, 26, }, /* 21 */ - { 99, 21, 12, 0, 0, 8192, 14, }, /* 22 */ - { 99, 13, 12, 0, 0, 10240, 28, }, /* 23 */ - { 99, 21, 12, 0, 0, 8192, 30, }, /* 24 */ - { 99, 21, 12, 0, 0, 28672, 22, }, /* 25 */ - { 99, 25, 12, 0, 0, 28672, 32, }, /* 26 */ - { 99, 25, 12, 0, 0, 28672, 20, }, /* 27 */ +const ucd_record PRIV(ucd_records)[] = { /* 18756 bytes, record size 12 */ + { 100, 0, 2, 0, 0, 6144, 2, }, /* 0 */ + { 100, 0, 2, 0, 0, 43008, 4, }, /* 1 */ + { 100, 0, 1, 0, 0, 4096, 4, }, /* 2 */ + { 100, 0, 2, 0, 0, 45056, 4, }, /* 3 */ + { 100, 0, 0, 0, 0, 4096, 4, }, /* 4 */ + { 100, 0, 2, 0, 0, 4096, 2, }, /* 5 */ + { 100, 0, 2, 0, 0, 43008, 2, }, /* 6 */ + { 100, 29, 12, 0, 0, 45056, 6, }, /* 7 */ + { 100, 21, 12, 0, 0, 28672, 8, }, /* 8 */ + { 100, 21, 12, 0, 0, 28672, 10, }, /* 9 */ + { 100, 21, 12, 0, 0, 14336, 12, }, /* 10 */ + { 100, 23, 12, 0, 0, 14336, 14, }, /* 11 */ + { 100, 21, 12, 0, 0, 14336, 14, }, /* 12 */ + { 100, 21, 12, 0, 0, 28672, 14, }, /* 13 */ + { 100, 21, 12, 0, 0, 28672, 16, }, /* 14 */ + { 100, 22, 12, 0, 0, 28672, 18, }, /* 15 */ + { 100, 18, 12, 0, 0, 28672, 18, }, /* 16 */ + { 100, 21, 12, 0, 0, 28672, 12, }, /* 17 */ + { 100, 25, 12, 0, 0, 12288, 20, }, /* 18 */ + { 100, 21, 12, 0, 0, 8192, 22, }, /* 19 */ + { 100, 17, 12, 0, 0, 12288, 24, }, /* 20 */ + { 100, 21, 12, 0, 0, 8192, 26, }, /* 21 */ + { 100, 21, 12, 0, 0, 8192, 14, }, /* 22 */ + { 100, 13, 12, 0, 0, 10240, 28, }, /* 23 */ + { 100, 21, 12, 0, 0, 8192, 30, }, /* 24 */ + { 100, 21, 12, 0, 0, 28672, 22, }, /* 25 */ + { 100, 25, 12, 0, 0, 28672, 32, }, /* 26 */ + { 100, 25, 12, 0, 0, 28672, 20, }, /* 27 */ { 0, 9, 12, 0, 32, 18432, 34, }, /* 28 */ { 0, 9, 12, 0, 32, 18432, 36, }, /* 29 */ { 0, 9, 12, 100, 32, 18432, 36, }, /* 30 */ { 0, 9, 12, 1, 32, 18432, 36, }, /* 31 */ - { 99, 24, 12, 0, 0, 28672, 38, }, /* 32 */ - { 99, 16, 12, 0, 0, 28672, 40, }, /* 33 */ - { 99, 24, 12, 0, 0, 28672, 42, }, /* 34 */ + { 100, 24, 12, 0, 0, 28672, 38, }, /* 32 */ + { 100, 16, 12, 0, 0, 28672, 40, }, /* 33 */ + { 100, 24, 12, 0, 0, 28672, 42, }, /* 34 */ { 0, 5, 12, 0, -32, 18432, 44, }, /* 35 */ { 0, 5, 12, 0, -32, 18432, 46, }, /* 36 */ { 0, 5, 12, 0, -32, 18432, 48, }, /* 37 */ { 0, 5, 12, 100, -32, 18432, 46, }, /* 38 */ { 0, 5, 12, 1, -32, 18432, 46, }, /* 39 */ - { 99, 0, 2, 0, 0, 6144, 0, }, /* 40 */ - { 99, 0, 2, 0, 0, 4096, 50, }, /* 41 */ - { 99, 29, 12, 0, 0, 8192, 52, }, /* 42 */ - { 99, 21, 12, 0, 0, 28672, 54, }, /* 43 */ - { 99, 23, 12, 0, 0, 14336, 54, }, /* 44 */ - { 99, 26, 12, 0, 0, 28672, 54, }, /* 45 */ - { 99, 24, 12, 0, 0, 28672, 56, }, /* 46 */ - { 99, 26, 14, 0, 0, 28672, 58, }, /* 47 */ + { 100, 0, 2, 0, 0, 6144, 0, }, /* 40 */ + { 100, 0, 2, 0, 0, 4096, 50, }, /* 41 */ + { 100, 29, 12, 0, 0, 8192, 52, }, /* 42 */ + { 100, 21, 12, 0, 0, 28672, 54, }, /* 43 */ + { 100, 23, 12, 0, 0, 14336, 54, }, /* 44 */ + { 100, 26, 12, 0, 0, 28672, 54, }, /* 45 */ + { 100, 24, 12, 0, 0, 28672, 56, }, /* 46 */ + { 100, 26, 14, 0, 0, 28672, 58, }, /* 47 */ { 0, 7, 12, 0, 0, 18432, 60, }, /* 48 */ - { 99, 20, 12, 0, 0, 28672, 62, }, /* 49 */ - { 99, 25, 12, 0, 0, 28672, 64, }, /* 50 */ - { 99, 1, 2, 0, 0, 6144, 66, }, /* 51 */ - { 99, 26, 12, 0, 0, 14336, 54, }, /* 52 */ - { 99, 25, 12, 0, 0, 14336, 64, }, /* 53 */ - { 99, 15, 12, 0, 0, 10240, 68, }, /* 54 */ - { 99, 5, 12, 26, 775, 18432, 70, }, /* 55 */ - { 99, 21, 12, 0, 0, 28676, 72, }, /* 56 */ - { 99, 19, 12, 0, 0, 28672, 62, }, /* 57 */ - { 99, 15, 12, 0, 0, 28672, 74, }, /* 58 */ + { 100, 20, 12, 0, 0, 28672, 62, }, /* 49 */ + { 100, 25, 12, 0, 0, 28672, 64, }, /* 50 */ + { 100, 1, 2, 0, 0, 6144, 66, }, /* 51 */ + { 100, 26, 12, 0, 0, 14336, 54, }, /* 52 */ + { 100, 25, 12, 0, 0, 14336, 64, }, /* 53 */ + { 100, 15, 12, 0, 0, 10240, 68, }, /* 54 */ + { 100, 5, 12, 26, 775, 18432, 70, }, /* 55 */ + { 100, 21, 12, 0, 0, 28676, 72, }, /* 56 */ + { 100, 19, 12, 0, 0, 28672, 62, }, /* 57 */ + { 100, 15, 12, 0, 0, 28672, 74, }, /* 58 */ { 0, 9, 12, 0, 32, 18432, 76, }, /* 59 */ { 0, 9, 12, 104, 32, 18432, 76, }, /* 60 */ { 0, 5, 12, 0, 7615, 18432, 70, }, /* 61 */ @@ -701,59 +709,59 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 0, 5, 12, 0, 42258, 18432, 78, }, /* 148 */ { 0, 6, 12, 0, 0, 18432, 90, }, /* 149 */ { 0, 6, 12, 0, 0, 18432, 92, }, /* 150 */ - { 99, 6, 12, 0, 0, 28672, 94, }, /* 151 */ - { 99, 6, 12, 0, 0, 18432, 94, }, /* 152 */ - { 99, 6, 12, 0, 0, 18440, 94, }, /* 153 */ - { 99, 6, 12, 0, 0, 18432, 90, }, /* 154 */ - { 99, 6, 12, 0, 0, 28684, 94, }, /* 155 */ - { 99, 6, 12, 0, 0, 28688, 94, }, /* 156 */ - { 99, 6, 12, 0, 0, 18432, 96, }, /* 157 */ - { 99, 24, 12, 0, 0, 28692, 56, }, /* 158 */ - { 99, 24, 12, 0, 0, 28684, 56, }, /* 159 */ + { 100, 6, 12, 0, 0, 28672, 94, }, /* 151 */ + { 100, 6, 12, 0, 0, 18432, 94, }, /* 152 */ + { 100, 6, 12, 0, 0, 18440, 94, }, /* 153 */ + { 100, 6, 12, 0, 0, 18432, 90, }, /* 154 */ + { 100, 6, 12, 0, 0, 28684, 94, }, /* 155 */ + { 100, 6, 12, 0, 0, 28688, 94, }, /* 156 */ + { 100, 6, 12, 0, 0, 18432, 96, }, /* 157 */ + { 100, 24, 12, 0, 0, 28692, 56, }, /* 158 */ + { 100, 24, 12, 0, 0, 28684, 56, }, /* 159 */ { 29, 24, 12, 0, 0, 28672, 56, }, /* 160 */ - { 106, 12, 3, 0, 0, 26648, 98, }, /* 161 */ - { 106, 12, 3, 0, 0, 26652, 98, }, /* 162 */ - { 106, 12, 3, 0, 0, 26656, 98, }, /* 163 */ - { 106, 12, 3, 0, 0, 26660, 98, }, /* 164 */ - { 106, 12, 3, 0, 0, 26664, 98, }, /* 165 */ - { 106, 12, 3, 0, 0, 26668, 98, }, /* 166 */ - { 106, 12, 3, 0, 0, 26672, 98, }, /* 167 */ - { 106, 12, 3, 0, 0, 26676, 98, }, /* 168 */ - { 106, 12, 3, 0, 0, 26680, 98, }, /* 169 */ - { 106, 12, 3, 0, 0, 26684, 98, }, /* 170 */ - { 106, 12, 3, 0, 0, 26688, 98, }, /* 171 */ - { 106, 12, 3, 0, 0, 26692, 98, }, /* 172 */ - { 106, 12, 3, 0, 0, 26696, 98, }, /* 173 */ - { 106, 12, 3, 0, 0, 26700, 98, }, /* 174 */ - { 106, 12, 3, 0, 0, 26704, 98, }, /* 175 */ - { 106, 12, 3, 0, 0, 26624, 98, }, /* 176 */ - { 106, 12, 3, 0, 0, 26708, 98, }, /* 177 */ - { 106, 12, 3, 0, 0, 26712, 98, }, /* 178 */ - { 106, 12, 3, 0, 0, 26716, 98, }, /* 179 */ - { 106, 12, 3, 0, 0, 26720, 98, }, /* 180 */ - { 106, 12, 3, 0, 0, 26724, 98, }, /* 181 */ - { 106, 12, 3, 0, 0, 26728, 98, }, /* 182 */ - { 106, 12, 3, 0, 0, 26732, 98, }, /* 183 */ - { 106, 12, 3, 0, 0, 26736, 98, }, /* 184 */ - { 106, 12, 3, 0, 0, 26740, 98, }, /* 185 */ - { 106, 12, 3, 21, 116, 26740, 100, }, /* 186 */ - { 106, 12, 3, 0, 0, 26624, 102, }, /* 187 */ - { 106, 12, 3, 0, 0, 26744, 104, }, /* 188 */ - { 106, 12, 3, 0, 0, 26624, 104, }, /* 189 */ - { 106, 12, 3, 0, 0, 26748, 98, }, /* 190 */ - { 106, 12, 3, 0, 0, 26752, 106, }, /* 191 */ + { 107, 12, 3, 0, 0, 26648, 98, }, /* 161 */ + { 107, 12, 3, 0, 0, 26652, 98, }, /* 162 */ + { 107, 12, 3, 0, 0, 26656, 98, }, /* 163 */ + { 107, 12, 3, 0, 0, 26660, 98, }, /* 164 */ + { 107, 12, 3, 0, 0, 26664, 98, }, /* 165 */ + { 107, 12, 3, 0, 0, 26668, 98, }, /* 166 */ + { 107, 12, 3, 0, 0, 26672, 98, }, /* 167 */ + { 107, 12, 3, 0, 0, 26676, 98, }, /* 168 */ + { 107, 12, 3, 0, 0, 26680, 98, }, /* 169 */ + { 107, 12, 3, 0, 0, 26684, 98, }, /* 170 */ + { 107, 12, 3, 0, 0, 26688, 98, }, /* 171 */ + { 107, 12, 3, 0, 0, 26692, 98, }, /* 172 */ + { 107, 12, 3, 0, 0, 26696, 98, }, /* 173 */ + { 107, 12, 3, 0, 0, 26700, 98, }, /* 174 */ + { 107, 12, 3, 0, 0, 26704, 98, }, /* 175 */ + { 107, 12, 3, 0, 0, 26624, 98, }, /* 176 */ + { 107, 12, 3, 0, 0, 26708, 98, }, /* 177 */ + { 107, 12, 3, 0, 0, 26712, 98, }, /* 178 */ + { 107, 12, 3, 0, 0, 26716, 98, }, /* 179 */ + { 107, 12, 3, 0, 0, 26720, 98, }, /* 180 */ + { 107, 12, 3, 0, 0, 26724, 98, }, /* 181 */ + { 107, 12, 3, 0, 0, 26728, 98, }, /* 182 */ + { 107, 12, 3, 0, 0, 26732, 98, }, /* 183 */ + { 107, 12, 3, 0, 0, 26736, 98, }, /* 184 */ + { 107, 12, 3, 0, 0, 26740, 98, }, /* 185 */ + { 107, 12, 3, 21, 116, 26740, 100, }, /* 186 */ + { 107, 12, 3, 0, 0, 26624, 102, }, /* 187 */ + { 107, 12, 3, 0, 0, 26744, 104, }, /* 188 */ + { 107, 12, 3, 0, 0, 26624, 104, }, /* 189 */ + { 107, 12, 3, 0, 0, 26748, 98, }, /* 190 */ + { 107, 12, 3, 0, 0, 26752, 106, }, /* 191 */ { 1, 9, 12, 0, 1, 18432, 76, }, /* 192 */ { 1, 5, 12, 0, -1, 18432, 78, }, /* 193 */ - { 99, 6, 12, 0, 0, 28804, 94, }, /* 194 */ + { 100, 6, 12, 0, 0, 28804, 94, }, /* 194 */ { 1, 24, 12, 0, 0, 28804, 56, }, /* 195 */ - { 98, 2, 12, 0, 0, 18432, 0, }, /* 196 */ + { 99, 2, 12, 0, 0, 18432, 0, }, /* 196 */ { 1, 6, 12, 0, 0, 18432, 108, }, /* 197 */ { 1, 5, 12, 0, 130, 18432, 78, }, /* 198 */ - { 99, 21, 12, 0, 0, 28672, 110, }, /* 199 */ + { 100, 21, 12, 0, 0, 28672, 110, }, /* 199 */ { 1, 9, 12, 0, 116, 18432, 76, }, /* 200 */ { 1, 24, 12, 0, 0, 28672, 56, }, /* 201 */ { 1, 9, 12, 0, 38, 18432, 76, }, /* 202 */ - { 99, 21, 12, 0, 0, 28672, 112, }, /* 203 */ + { 100, 21, 12, 0, 0, 28672, 112, }, /* 203 */ { 1, 9, 12, 0, 37, 18432, 76, }, /* 204 */ { 1, 9, 12, 0, 64, 18432, 76, }, /* 205 */ { 1, 9, 12, 0, 63, 18432, 76, }, /* 206 */ @@ -832,7 +840,7 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 2, 26, 12, 0, 0, 18432, 74, }, /* 279 */ { 2, 12, 3, 0, 0, 26760, 98, }, /* 280 */ { 2, 12, 3, 0, 0, 26764, 98, }, /* 281 */ - { 106, 12, 3, 0, 0, 26768, 98, }, /* 282 */ + { 107, 12, 3, 0, 0, 26768, 98, }, /* 282 */ { 2, 11, 3, 0, 0, 26624, 124, }, /* 283 */ { 2, 9, 12, 0, 15, 18432, 76, }, /* 284 */ { 2, 5, 12, 0, -15, 18432, 78, }, /* 285 */ @@ -847,1252 +855,1272 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 3, 17, 12, 0, 0, 28672, 130, }, /* 294 */ { 3, 26, 12, 0, 0, 28672, 74, }, /* 295 */ { 3, 23, 12, 0, 0, 14336, 74, }, /* 296 */ - { 98, 2, 12, 0, 0, 34816, 0, }, /* 297 */ + { 99, 2, 12, 0, 0, 34816, 0, }, /* 297 */ { 4, 12, 3, 0, 0, 26624, 98, }, /* 298 */ - { 4, 12, 3, 0, 0, 26624, 104, }, /* 299 */ - { 4, 12, 3, 0, 0, 26624, 132, }, /* 300 */ - { 4, 17, 12, 0, 0, 34816, 130, }, /* 301 */ - { 4, 21, 12, 0, 0, 34816, 74, }, /* 302 */ - { 4, 21, 12, 0, 0, 34816, 110, }, /* 303 */ - { 4, 12, 3, 0, 0, 26624, 106, }, /* 304 */ - { 4, 7, 12, 0, 0, 34816, 84, }, /* 305 */ - { 4, 21, 12, 0, 0, 34816, 126, }, /* 306 */ - { 5, 1, 4, 0, 0, 2048, 134, }, /* 307 */ - { 99, 1, 4, 0, 0, 2048, 134, }, /* 308 */ - { 5, 25, 12, 0, 0, 28672, 122, }, /* 309 */ - { 5, 25, 12, 0, 0, 0, 122, }, /* 310 */ - { 5, 21, 12, 0, 0, 14336, 74, }, /* 311 */ - { 5, 23, 12, 0, 0, 0, 74, }, /* 312 */ - { 99, 21, 12, 0, 0, 8344, 110, }, /* 313 */ - { 5, 21, 12, 0, 0, 0, 74, }, /* 314 */ - { 5, 26, 12, 0, 0, 28672, 74, }, /* 315 */ - { 5, 12, 3, 0, 0, 26624, 106, }, /* 316 */ - { 99, 21, 12, 0, 0, 152, 110, }, /* 317 */ - { 5, 1, 2, 0, 0, 156, 136, }, /* 318 */ - { 5, 21, 12, 0, 0, 0, 128, }, /* 319 */ - { 99, 21, 12, 0, 0, 160, 128, }, /* 320 */ - { 5, 7, 12, 0, 0, 0, 84, }, /* 321 */ - { 99, 6, 12, 0, 0, 164, 138, }, /* 322 */ - { 106, 12, 3, 0, 0, 26792, 132, }, /* 323 */ - { 106, 12, 3, 0, 0, 26792, 106, }, /* 324 */ - { 106, 12, 3, 0, 0, 26792, 140, }, /* 325 */ - { 5, 12, 3, 0, 0, 26624, 132, }, /* 326 */ - { 5, 12, 3, 0, 0, 26624, 142, }, /* 327 */ - { 5, 13, 12, 0, 0, 2220, 144, }, /* 328 */ - { 5, 21, 12, 0, 0, 2048, 74, }, /* 329 */ - { 5, 7, 12, 0, 0, 0, 146, }, /* 330 */ - { 5, 21, 12, 0, 0, 176, 128, }, /* 331 */ - { 5, 12, 3, 0, 0, 26624, 140, }, /* 332 */ - { 5, 12, 3, 0, 0, 26624, 98, }, /* 333 */ - { 5, 6, 12, 0, 0, 0, 94, }, /* 334 */ - { 5, 13, 12, 0, 0, 10240, 144, }, /* 335 */ - { 5, 26, 12, 0, 0, 0, 74, }, /* 336 */ - { 6, 21, 12, 0, 0, 0, 128, }, /* 337 */ - { 6, 21, 12, 0, 0, 0, 110, }, /* 338 */ - { 6, 21, 12, 0, 0, 0, 74, }, /* 339 */ - { 98, 2, 12, 0, 0, 0, 0, }, /* 340 */ - { 6, 1, 4, 0, 0, 0, 134, }, /* 341 */ - { 6, 7, 12, 0, 0, 0, 84, }, /* 342 */ - { 6, 12, 3, 0, 0, 26624, 106, }, /* 343 */ - { 6, 12, 3, 0, 0, 26624, 132, }, /* 344 */ - { 6, 12, 3, 0, 0, 26624, 98, }, /* 345 */ - { 7, 7, 12, 0, 0, 0, 84, }, /* 346 */ - { 7, 12, 3, 0, 0, 26624, 132, }, /* 347 */ - { 48, 13, 12, 0, 0, 34816, 144, }, /* 348 */ - { 48, 7, 12, 0, 0, 34816, 84, }, /* 349 */ - { 48, 12, 3, 0, 0, 26624, 98, }, /* 350 */ - { 48, 6, 12, 0, 0, 34816, 94, }, /* 351 */ - { 48, 26, 12, 0, 0, 28672, 74, }, /* 352 */ - { 48, 21, 12, 0, 0, 28672, 74, }, /* 353 */ - { 48, 21, 12, 0, 0, 28672, 110, }, /* 354 */ - { 48, 21, 12, 0, 0, 28672, 128, }, /* 355 */ - { 48, 6, 12, 0, 0, 34816, 138, }, /* 356 */ - { 48, 12, 3, 0, 0, 26624, 104, }, /* 357 */ - { 48, 23, 12, 0, 0, 34816, 74, }, /* 358 */ - { 54, 7, 12, 0, 0, 34816, 84, }, /* 359 */ - { 54, 12, 3, 0, 0, 26624, 106, }, /* 360 */ - { 54, 12, 3, 0, 0, 26624, 98, }, /* 361 */ - { 54, 6, 12, 0, 0, 34816, 148, }, /* 362 */ - { 54, 12, 3, 0, 0, 26624, 104, }, /* 363 */ - { 54, 21, 12, 0, 0, 34816, 110, }, /* 364 */ - { 54, 21, 12, 0, 0, 34816, 74, }, /* 365 */ - { 54, 21, 12, 0, 0, 34816, 128, }, /* 366 */ - { 59, 7, 12, 0, 0, 34816, 84, }, /* 367 */ - { 59, 12, 3, 0, 0, 26624, 104, }, /* 368 */ - { 59, 21, 12, 0, 0, 34816, 110, }, /* 369 */ - { 5, 24, 12, 0, 0, 0, 126, }, /* 370 */ - { 5, 12, 3, 0, 0, 26624, 150, }, /* 371 */ - { 5, 12, 3, 0, 0, 26624, 104, }, /* 372 */ - { 5, 12, 3, 0, 0, 26624, 152, }, /* 373 */ - { 8, 12, 3, 0, 0, 26624, 106, }, /* 374 */ - { 8, 10, 5, 0, 0, 18432, 154, }, /* 375 */ - { 8, 7, 12, 0, 0, 18432, 84, }, /* 376 */ - { 8, 7, 12, 0, 0, 18432, 156, }, /* 377 */ - { 8, 12, 3, 0, 0, 26624, 98, }, /* 378 */ - { 8, 12, 3, 0, 0, 26624, 158, }, /* 379 */ - { 106, 12, 3, 0, 0, 26804, 98, }, /* 380 */ - { 106, 12, 3, 0, 0, 26808, 98, }, /* 381 */ - { 99, 21, 12, 0, 0, 18620, 128, }, /* 382 */ - { 99, 21, 12, 0, 0, 18624, 128, }, /* 383 */ - { 8, 13, 12, 0, 0, 18628, 144, }, /* 384 */ - { 8, 21, 12, 0, 0, 18432, 74, }, /* 385 */ - { 8, 6, 12, 0, 0, 18432, 94, }, /* 386 */ - { 9, 7, 12, 0, 0, 18432, 84, }, /* 387 */ - { 9, 12, 3, 0, 0, 26624, 106, }, /* 388 */ - { 9, 10, 5, 0, 0, 18432, 154, }, /* 389 */ - { 9, 7, 12, 0, 0, 18432, 156, }, /* 390 */ - { 9, 12, 3, 0, 0, 26624, 98, }, /* 391 */ - { 9, 10, 3, 0, 0, 18432, 160, }, /* 392 */ - { 9, 12, 3, 0, 0, 26624, 158, }, /* 393 */ - { 9, 13, 12, 0, 0, 18632, 144, }, /* 394 */ - { 9, 23, 12, 0, 0, 14336, 74, }, /* 395 */ - { 9, 15, 12, 0, 0, 18432, 74, }, /* 396 */ - { 9, 26, 12, 0, 0, 18432, 74, }, /* 397 */ - { 9, 21, 12, 0, 0, 18432, 74, }, /* 398 */ - { 9, 12, 3, 0, 0, 26624, 104, }, /* 399 */ - { 10, 12, 3, 0, 0, 26624, 106, }, /* 400 */ - { 10, 10, 5, 0, 0, 18432, 154, }, /* 401 */ - { 10, 7, 12, 0, 0, 18432, 84, }, /* 402 */ - { 10, 12, 3, 0, 0, 26624, 98, }, /* 403 */ - { 10, 12, 3, 0, 0, 26624, 158, }, /* 404 */ - { 10, 13, 12, 0, 0, 18636, 144, }, /* 405 */ - { 10, 12, 3, 0, 0, 26624, 162, }, /* 406 */ - { 10, 21, 12, 0, 0, 18432, 74, }, /* 407 */ - { 11, 12, 3, 0, 0, 26624, 106, }, /* 408 */ - { 11, 10, 5, 0, 0, 18432, 154, }, /* 409 */ - { 11, 7, 12, 0, 0, 18432, 84, }, /* 410 */ - { 11, 7, 12, 0, 0, 18432, 156, }, /* 411 */ - { 11, 12, 3, 0, 0, 26624, 98, }, /* 412 */ - { 11, 12, 3, 0, 0, 26624, 158, }, /* 413 */ - { 11, 13, 12, 0, 0, 18640, 144, }, /* 414 */ - { 11, 21, 12, 0, 0, 18432, 74, }, /* 415 */ - { 11, 23, 12, 0, 0, 14336, 74, }, /* 416 */ - { 11, 12, 3, 0, 0, 26624, 162, }, /* 417 */ - { 12, 12, 3, 0, 0, 26624, 106, }, /* 418 */ - { 12, 10, 5, 0, 0, 18432, 154, }, /* 419 */ - { 12, 7, 12, 0, 0, 18432, 84, }, /* 420 */ - { 12, 7, 12, 0, 0, 18432, 156, }, /* 421 */ - { 12, 12, 3, 0, 0, 26624, 98, }, /* 422 */ - { 12, 10, 3, 0, 0, 18432, 160, }, /* 423 */ - { 12, 12, 3, 0, 0, 26624, 158, }, /* 424 */ - { 12, 12, 3, 0, 0, 26624, 164, }, /* 425 */ - { 12, 13, 12, 0, 0, 18432, 144, }, /* 426 */ - { 12, 26, 12, 0, 0, 18432, 74, }, /* 427 */ - { 12, 15, 12, 0, 0, 18432, 74, }, /* 428 */ - { 13, 12, 3, 0, 0, 26624, 106, }, /* 429 */ - { 13, 7, 12, 0, 0, 18432, 84, }, /* 430 */ - { 13, 10, 3, 0, 0, 18432, 160, }, /* 431 */ - { 13, 10, 5, 0, 0, 18432, 154, }, /* 432 */ - { 13, 12, 3, 0, 0, 26624, 158, }, /* 433 */ - { 13, 13, 12, 0, 0, 18644, 144, }, /* 434 */ - { 13, 15, 12, 0, 0, 18644, 74, }, /* 435 */ - { 13, 26, 12, 0, 0, 28884, 74, }, /* 436 */ - { 13, 26, 12, 0, 0, 28672, 74, }, /* 437 */ - { 13, 23, 12, 0, 0, 14336, 74, }, /* 438 */ - { 14, 12, 3, 0, 0, 26624, 106, }, /* 439 */ - { 14, 10, 5, 0, 0, 18432, 154, }, /* 440 */ - { 14, 7, 12, 0, 0, 18432, 84, }, /* 441 */ - { 14, 7, 12, 0, 0, 18432, 156, }, /* 442 */ - { 14, 12, 3, 0, 0, 26624, 98, }, /* 443 */ - { 14, 12, 3, 0, 0, 26624, 158, }, /* 444 */ - { 14, 13, 12, 0, 0, 18432, 144, }, /* 445 */ - { 14, 21, 12, 0, 0, 18432, 74, }, /* 446 */ - { 14, 15, 12, 0, 0, 28672, 74, }, /* 447 */ - { 14, 26, 12, 0, 0, 18432, 74, }, /* 448 */ - { 15, 7, 12, 0, 0, 18432, 84, }, /* 449 */ - { 15, 12, 3, 0, 0, 26624, 106, }, /* 450 */ - { 15, 10, 5, 0, 0, 18432, 154, }, /* 451 */ - { 15, 21, 12, 0, 0, 18432, 74, }, /* 452 */ - { 15, 12, 3, 0, 0, 26624, 98, }, /* 453 */ - { 15, 12, 3, 0, 0, 18432, 106, }, /* 454 */ - { 15, 10, 3, 0, 0, 18432, 160, }, /* 455 */ - { 15, 12, 3, 0, 0, 26624, 158, }, /* 456 */ - { 15, 13, 12, 0, 0, 18648, 144, }, /* 457 */ - { 16, 12, 3, 0, 0, 26624, 106, }, /* 458 */ - { 16, 10, 5, 0, 0, 18432, 154, }, /* 459 */ - { 16, 7, 12, 0, 0, 18432, 84, }, /* 460 */ - { 16, 7, 12, 0, 0, 18432, 156, }, /* 461 */ - { 16, 12, 3, 0, 0, 26624, 158, }, /* 462 */ - { 16, 10, 3, 0, 0, 18432, 160, }, /* 463 */ - { 16, 7, 4, 0, 0, 18432, 84, }, /* 464 */ - { 16, 26, 12, 0, 0, 18432, 74, }, /* 465 */ - { 16, 15, 12, 0, 0, 18432, 74, }, /* 466 */ - { 16, 13, 12, 0, 0, 18432, 144, }, /* 467 */ - { 17, 12, 3, 0, 0, 26624, 106, }, /* 468 */ - { 17, 10, 5, 0, 0, 18432, 154, }, /* 469 */ - { 17, 7, 12, 0, 0, 18432, 84, }, /* 470 */ - { 17, 12, 3, 0, 0, 26624, 158, }, /* 471 */ - { 17, 10, 3, 0, 0, 18432, 160, }, /* 472 */ - { 17, 13, 12, 0, 0, 18432, 144, }, /* 473 */ - { 17, 21, 12, 0, 0, 18432, 74, }, /* 474 */ - { 18, 7, 12, 0, 0, 18432, 84, }, /* 475 */ - { 18, 12, 3, 0, 0, 26624, 106, }, /* 476 */ - { 18, 7, 5, 0, 0, 18432, 166, }, /* 477 */ - { 18, 12, 3, 0, 0, 26624, 168, }, /* 478 */ - { 99, 23, 12, 0, 0, 14336, 74, }, /* 479 */ - { 18, 7, 12, 0, 0, 18432, 170, }, /* 480 */ - { 18, 6, 12, 0, 0, 18432, 138, }, /* 481 */ - { 18, 12, 3, 0, 0, 26624, 98, }, /* 482 */ - { 18, 21, 12, 0, 0, 18432, 74, }, /* 483 */ - { 18, 13, 12, 0, 0, 18432, 144, }, /* 484 */ - { 18, 21, 12, 0, 0, 18432, 110, }, /* 485 */ - { 100, 7, 12, 0, 0, 18432, 84, }, /* 486 */ - { 100, 12, 3, 0, 0, 26624, 106, }, /* 487 */ - { 100, 7, 5, 0, 0, 18432, 166, }, /* 488 */ - { 100, 12, 3, 0, 0, 26624, 158, }, /* 489 */ - { 100, 7, 12, 0, 0, 18432, 170, }, /* 490 */ - { 100, 6, 12, 0, 0, 18432, 138, }, /* 491 */ - { 100, 12, 3, 0, 0, 26624, 98, }, /* 492 */ - { 100, 12, 3, 0, 0, 26624, 104, }, /* 493 */ - { 100, 13, 12, 0, 0, 18432, 144, }, /* 494 */ - { 19, 7, 12, 0, 0, 18432, 84, }, /* 495 */ - { 19, 26, 12, 0, 0, 18432, 74, }, /* 496 */ - { 19, 21, 12, 0, 0, 18432, 74, }, /* 497 */ - { 19, 21, 12, 0, 0, 18432, 110, }, /* 498 */ - { 19, 12, 3, 0, 0, 26624, 98, }, /* 499 */ - { 19, 13, 12, 0, 0, 18432, 144, }, /* 500 */ - { 19, 15, 12, 0, 0, 18432, 74, }, /* 501 */ - { 19, 22, 12, 0, 0, 28672, 172, }, /* 502 */ - { 19, 18, 12, 0, 0, 28672, 172, }, /* 503 */ - { 19, 10, 5, 0, 0, 18432, 174, }, /* 504 */ - { 19, 12, 3, 0, 0, 26624, 106, }, /* 505 */ - { 19, 12, 3, 0, 0, 26624, 176, }, /* 506 */ - { 19, 10, 5, 0, 0, 18432, 154, }, /* 507 */ - { 19, 12, 3, 0, 0, 26624, 132, }, /* 508 */ - { 19, 12, 3, 0, 0, 26624, 158, }, /* 509 */ - { 99, 26, 12, 0, 0, 18432, 74, }, /* 510 */ - { 20, 7, 12, 0, 0, 18432, 84, }, /* 511 */ - { 20, 10, 12, 0, 0, 18432, 154, }, /* 512 */ - { 20, 12, 3, 0, 0, 26624, 106, }, /* 513 */ - { 20, 10, 5, 0, 0, 18432, 154, }, /* 514 */ - { 20, 12, 3, 0, 0, 26624, 98, }, /* 515 */ - { 20, 12, 3, 0, 0, 26624, 158, }, /* 516 */ - { 20, 13, 12, 0, 0, 18652, 144, }, /* 517 */ - { 20, 21, 12, 0, 0, 18432, 128, }, /* 518 */ - { 20, 21, 12, 0, 0, 18432, 74, }, /* 519 */ - { 20, 10, 12, 0, 0, 18432, 178, }, /* 520 */ - { 20, 12, 3, 0, 0, 26624, 132, }, /* 521 */ - { 20, 13, 12, 0, 0, 18432, 144, }, /* 522 */ - { 20, 26, 12, 0, 0, 18432, 74, }, /* 523 */ - { 21, 9, 12, 0, 7264, 18432, 76, }, /* 524 */ - { 21, 5, 12, 0, 3008, 18432, 180, }, /* 525 */ - { 99, 21, 12, 0, 0, 18656, 74, }, /* 526 */ - { 21, 6, 12, 0, 0, 18432, 182, }, /* 527 */ - { 22, 7, 6, 0, 0, 18432, 84, }, /* 528 */ - { 22, 7, 6, 0, 0, 18432, 184, }, /* 529 */ - { 22, 7, 7, 0, 0, 18432, 184, }, /* 530 */ - { 22, 7, 7, 0, 0, 18432, 84, }, /* 531 */ - { 22, 7, 8, 0, 0, 18432, 84, }, /* 532 */ - { 23, 7, 12, 0, 0, 18432, 84, }, /* 533 */ - { 23, 12, 3, 0, 0, 26624, 98, }, /* 534 */ - { 23, 21, 12, 0, 0, 18432, 74, }, /* 535 */ - { 23, 21, 12, 0, 0, 18432, 110, }, /* 536 */ - { 23, 21, 12, 0, 0, 18432, 128, }, /* 537 */ - { 23, 15, 12, 0, 0, 18432, 144, }, /* 538 */ - { 23, 15, 12, 0, 0, 18432, 74, }, /* 539 */ - { 23, 26, 12, 0, 0, 28672, 74, }, /* 540 */ - { 24, 9, 12, 0, 38864, 18432, 186, }, /* 541 */ - { 24, 9, 12, 0, 8, 18432, 186, }, /* 542 */ - { 24, 5, 12, 0, -8, 18432, 70, }, /* 543 */ - { 101, 17, 12, 0, 0, 28672, 130, }, /* 544 */ - { 101, 7, 12, 0, 0, 18432, 84, }, /* 545 */ - { 101, 26, 12, 0, 0, 18432, 74, }, /* 546 */ - { 101, 21, 12, 0, 0, 18432, 128, }, /* 547 */ - { 102, 29, 12, 0, 0, 45056, 52, }, /* 548 */ - { 102, 7, 12, 0, 0, 18432, 84, }, /* 549 */ - { 102, 22, 12, 0, 0, 28672, 172, }, /* 550 */ - { 102, 18, 12, 0, 0, 28672, 172, }, /* 551 */ - { 25, 7, 12, 0, 0, 18432, 84, }, /* 552 */ - { 99, 21, 12, 0, 0, 18660, 110, }, /* 553 */ - { 25, 14, 12, 0, 0, 18432, 84, }, /* 554 */ - { 33, 7, 12, 0, 0, 18432, 84, }, /* 555 */ - { 33, 12, 3, 0, 0, 26624, 106, }, /* 556 */ - { 33, 12, 3, 0, 0, 26624, 158, }, /* 557 */ - { 33, 10, 3, 0, 0, 18432, 188, }, /* 558 */ - { 34, 7, 12, 0, 0, 18432, 84, }, /* 559 */ - { 34, 12, 3, 0, 0, 26624, 106, }, /* 560 */ - { 34, 10, 3, 0, 0, 18432, 188, }, /* 561 */ - { 99, 21, 12, 0, 0, 18664, 128, }, /* 562 */ - { 35, 7, 12, 0, 0, 18432, 84, }, /* 563 */ - { 35, 12, 3, 0, 0, 26624, 106, }, /* 564 */ - { 36, 7, 12, 0, 0, 18432, 84, }, /* 565 */ - { 36, 12, 3, 0, 0, 26624, 106, }, /* 566 */ - { 103, 7, 12, 0, 0, 18432, 84, }, /* 567 */ - { 103, 7, 12, 0, 0, 18432, 146, }, /* 568 */ - { 103, 12, 3, 0, 0, 26624, 102, }, /* 569 */ - { 103, 10, 5, 0, 0, 18432, 154, }, /* 570 */ - { 103, 12, 3, 0, 0, 26624, 106, }, /* 571 */ - { 103, 12, 3, 0, 0, 26624, 98, }, /* 572 */ - { 103, 12, 3, 0, 0, 26624, 158, }, /* 573 */ - { 103, 21, 12, 0, 0, 18432, 128, }, /* 574 */ - { 103, 21, 12, 0, 0, 18432, 110, }, /* 575 */ - { 103, 6, 12, 0, 0, 18432, 148, }, /* 576 */ - { 103, 21, 12, 0, 0, 18432, 74, }, /* 577 */ - { 103, 23, 12, 0, 0, 14336, 74, }, /* 578 */ - { 103, 13, 12, 0, 0, 18432, 144, }, /* 579 */ - { 103, 15, 12, 0, 0, 28672, 74, }, /* 580 */ - { 26, 21, 12, 0, 0, 28672, 74, }, /* 581 */ - { 99, 21, 12, 0, 0, 28908, 110, }, /* 582 */ - { 99, 21, 12, 0, 0, 28908, 128, }, /* 583 */ - { 26, 21, 12, 0, 0, 28672, 110, }, /* 584 */ - { 26, 17, 12, 0, 0, 28672, 130, }, /* 585 */ - { 26, 21, 12, 0, 0, 28672, 128, }, /* 586 */ - { 26, 21, 12, 0, 0, 28672, 190, }, /* 587 */ - { 26, 12, 3, 0, 0, 26624, 192, }, /* 588 */ - { 26, 1, 2, 0, 0, 6144, 66, }, /* 589 */ - { 26, 13, 12, 0, 0, 18432, 144, }, /* 590 */ - { 26, 7, 12, 0, 0, 18432, 84, }, /* 591 */ - { 26, 6, 12, 0, 0, 18432, 138, }, /* 592 */ - { 26, 12, 3, 0, 0, 26624, 194, }, /* 593 */ - { 26, 12, 3, 0, 0, 26624, 106, }, /* 594 */ - { 37, 7, 12, 0, 0, 18432, 84, }, /* 595 */ - { 37, 12, 3, 0, 0, 26624, 106, }, /* 596 */ - { 37, 10, 5, 0, 0, 18432, 154, }, /* 597 */ - { 37, 12, 3, 0, 0, 26624, 98, }, /* 598 */ - { 37, 26, 12, 0, 0, 28672, 74, }, /* 599 */ - { 37, 21, 12, 0, 0, 28672, 128, }, /* 600 */ - { 37, 13, 12, 0, 0, 18432, 144, }, /* 601 */ - { 38, 7, 12, 0, 0, 18432, 84, }, /* 602 */ - { 110, 7, 12, 0, 0, 18432, 84, }, /* 603 */ - { 110, 7, 12, 0, 0, 18432, 170, }, /* 604 */ - { 110, 13, 12, 0, 0, 18432, 144, }, /* 605 */ - { 110, 15, 12, 0, 0, 18432, 144, }, /* 606 */ - { 110, 26, 12, 0, 0, 28672, 74, }, /* 607 */ - { 103, 26, 12, 0, 0, 28672, 74, }, /* 608 */ - { 42, 7, 12, 0, 0, 18432, 84, }, /* 609 */ - { 42, 12, 3, 0, 0, 26624, 106, }, /* 610 */ - { 42, 10, 5, 0, 0, 18432, 154, }, /* 611 */ - { 42, 21, 12, 0, 0, 18432, 74, }, /* 612 */ - { 123, 7, 12, 0, 0, 18432, 84, }, /* 613 */ - { 123, 10, 5, 0, 0, 18432, 154, }, /* 614 */ - { 123, 12, 3, 0, 0, 26624, 106, }, /* 615 */ - { 123, 12, 3, 0, 0, 26624, 158, }, /* 616 */ - { 123, 10, 12, 0, 0, 18432, 154, }, /* 617 */ - { 123, 12, 3, 0, 0, 26624, 98, }, /* 618 */ - { 123, 13, 12, 0, 0, 18432, 144, }, /* 619 */ - { 123, 21, 12, 0, 0, 18432, 74, }, /* 620 */ - { 123, 6, 12, 0, 0, 18432, 138, }, /* 621 */ - { 123, 21, 12, 0, 0, 18432, 128, }, /* 622 */ - { 106, 11, 3, 0, 0, 26624, 196, }, /* 623 */ - { 106, 12, 3, 0, 0, 26624, 106, }, /* 624 */ - { 113, 12, 3, 0, 0, 26624, 106, }, /* 625 */ - { 113, 10, 5, 0, 0, 18432, 154, }, /* 626 */ - { 113, 7, 12, 0, 0, 18432, 84, }, /* 627 */ - { 113, 12, 3, 0, 0, 26624, 98, }, /* 628 */ - { 113, 10, 3, 0, 0, 18432, 160, }, /* 629 */ - { 113, 10, 3, 0, 0, 18432, 188, }, /* 630 */ - { 113, 21, 12, 0, 0, 18432, 128, }, /* 631 */ - { 113, 13, 12, 0, 0, 18432, 144, }, /* 632 */ - { 113, 21, 12, 0, 0, 18432, 74, }, /* 633 */ - { 113, 21, 12, 0, 0, 18432, 110, }, /* 634 */ - { 113, 26, 12, 0, 0, 18432, 74, }, /* 635 */ - { 116, 12, 3, 0, 0, 26624, 106, }, /* 636 */ - { 116, 10, 5, 0, 0, 18432, 154, }, /* 637 */ - { 116, 7, 12, 0, 0, 18432, 84, }, /* 638 */ - { 116, 10, 3, 0, 0, 18432, 188, }, /* 639 */ - { 116, 12, 3, 0, 0, 26624, 158, }, /* 640 */ - { 116, 13, 12, 0, 0, 18432, 144, }, /* 641 */ - { 132, 7, 12, 0, 0, 18432, 84, }, /* 642 */ - { 132, 12, 3, 0, 0, 26624, 98, }, /* 643 */ - { 132, 10, 5, 0, 0, 18432, 154, }, /* 644 */ - { 132, 12, 3, 0, 0, 26624, 106, }, /* 645 */ - { 132, 10, 3, 0, 0, 18432, 188, }, /* 646 */ - { 132, 21, 12, 0, 0, 18432, 74, }, /* 647 */ - { 117, 7, 12, 0, 0, 18432, 84, }, /* 648 */ - { 117, 10, 5, 0, 0, 18432, 154, }, /* 649 */ - { 117, 12, 3, 0, 0, 26624, 106, }, /* 650 */ - { 117, 12, 3, 0, 0, 26624, 198, }, /* 651 */ - { 117, 12, 3, 0, 0, 26624, 98, }, /* 652 */ - { 117, 21, 12, 0, 0, 18432, 128, }, /* 653 */ - { 117, 21, 12, 0, 0, 18432, 110, }, /* 654 */ - { 117, 13, 12, 0, 0, 18432, 144, }, /* 655 */ + { 4, 12, 3, 0, 0, 26624, 132, }, /* 299 */ + { 4, 17, 12, 0, 0, 34816, 130, }, /* 300 */ + { 4, 21, 12, 0, 0, 34816, 74, }, /* 301 */ + { 4, 21, 12, 0, 0, 34816, 110, }, /* 302 */ + { 4, 7, 12, 0, 0, 34816, 84, }, /* 303 */ + { 4, 21, 12, 0, 0, 34816, 126, }, /* 304 */ + { 5, 1, 4, 0, 0, 2048, 134, }, /* 305 */ + { 100, 1, 4, 0, 0, 2048, 134, }, /* 306 */ + { 5, 25, 12, 0, 0, 28672, 122, }, /* 307 */ + { 5, 25, 12, 0, 0, 0, 122, }, /* 308 */ + { 5, 21, 12, 0, 0, 14336, 74, }, /* 309 */ + { 5, 23, 12, 0, 0, 0, 74, }, /* 310 */ + { 100, 21, 12, 0, 0, 8344, 110, }, /* 311 */ + { 5, 21, 12, 0, 0, 0, 74, }, /* 312 */ + { 5, 26, 12, 0, 0, 28672, 74, }, /* 313 */ + { 5, 12, 3, 0, 0, 26624, 106, }, /* 314 */ + { 100, 21, 12, 0, 0, 152, 110, }, /* 315 */ + { 5, 1, 2, 0, 0, 156, 136, }, /* 316 */ + { 5, 21, 12, 0, 0, 0, 128, }, /* 317 */ + { 100, 21, 12, 0, 0, 160, 128, }, /* 318 */ + { 5, 7, 12, 0, 0, 0, 84, }, /* 319 */ + { 100, 6, 12, 0, 0, 164, 138, }, /* 320 */ + { 107, 12, 3, 0, 0, 26792, 132, }, /* 321 */ + { 107, 12, 3, 0, 0, 26792, 106, }, /* 322 */ + { 107, 12, 3, 0, 0, 26792, 140, }, /* 323 */ + { 5, 12, 3, 0, 0, 26624, 132, }, /* 324 */ + { 5, 12, 3, 0, 0, 26624, 142, }, /* 325 */ + { 5, 13, 12, 0, 0, 2220, 144, }, /* 326 */ + { 5, 21, 12, 0, 0, 2048, 74, }, /* 327 */ + { 5, 7, 12, 0, 0, 0, 146, }, /* 328 */ + { 5, 21, 12, 0, 0, 176, 128, }, /* 329 */ + { 5, 12, 3, 0, 0, 26624, 140, }, /* 330 */ + { 5, 12, 3, 0, 0, 26624, 98, }, /* 331 */ + { 5, 6, 12, 0, 0, 0, 94, }, /* 332 */ + { 5, 13, 12, 0, 0, 10240, 144, }, /* 333 */ + { 5, 26, 12, 0, 0, 0, 74, }, /* 334 */ + { 6, 21, 12, 0, 0, 0, 128, }, /* 335 */ + { 6, 21, 12, 0, 0, 0, 110, }, /* 336 */ + { 6, 21, 12, 0, 0, 0, 74, }, /* 337 */ + { 99, 2, 12, 0, 0, 0, 0, }, /* 338 */ + { 6, 1, 4, 0, 0, 0, 134, }, /* 339 */ + { 6, 7, 12, 0, 0, 0, 84, }, /* 340 */ + { 6, 12, 3, 0, 0, 26624, 106, }, /* 341 */ + { 6, 12, 3, 0, 0, 26624, 132, }, /* 342 */ + { 6, 12, 3, 0, 0, 26624, 98, }, /* 343 */ + { 7, 7, 12, 0, 0, 0, 84, }, /* 344 */ + { 7, 12, 3, 0, 0, 26624, 132, }, /* 345 */ + { 48, 13, 12, 0, 0, 34816, 144, }, /* 346 */ + { 48, 7, 12, 0, 0, 34816, 84, }, /* 347 */ + { 48, 12, 3, 0, 0, 26624, 98, }, /* 348 */ + { 48, 6, 12, 0, 0, 34816, 94, }, /* 349 */ + { 48, 26, 12, 0, 0, 28672, 74, }, /* 350 */ + { 48, 21, 12, 0, 0, 28672, 74, }, /* 351 */ + { 48, 21, 12, 0, 0, 28672, 110, }, /* 352 */ + { 48, 21, 12, 0, 0, 28672, 128, }, /* 353 */ + { 48, 6, 12, 0, 0, 34816, 138, }, /* 354 */ + { 48, 12, 3, 0, 0, 26624, 104, }, /* 355 */ + { 48, 23, 12, 0, 0, 34816, 74, }, /* 356 */ + { 54, 7, 12, 0, 0, 34816, 84, }, /* 357 */ + { 54, 12, 3, 0, 0, 26624, 106, }, /* 358 */ + { 54, 12, 3, 0, 0, 26624, 98, }, /* 359 */ + { 54, 6, 12, 0, 0, 34816, 148, }, /* 360 */ + { 54, 12, 3, 0, 0, 26624, 104, }, /* 361 */ + { 54, 21, 12, 0, 0, 34816, 110, }, /* 362 */ + { 54, 21, 12, 0, 0, 34816, 74, }, /* 363 */ + { 54, 21, 12, 0, 0, 34816, 128, }, /* 364 */ + { 59, 7, 12, 0, 0, 34816, 84, }, /* 365 */ + { 59, 12, 3, 0, 0, 26624, 104, }, /* 366 */ + { 59, 21, 12, 0, 0, 34816, 110, }, /* 367 */ + { 5, 24, 12, 0, 0, 0, 126, }, /* 368 */ + { 5, 12, 3, 0, 0, 26624, 150, }, /* 369 */ + { 5, 12, 3, 0, 0, 26624, 104, }, /* 370 */ + { 5, 12, 3, 0, 0, 26624, 152, }, /* 371 */ + { 8, 12, 3, 0, 0, 26624, 106, }, /* 372 */ + { 8, 10, 5, 0, 0, 18432, 154, }, /* 373 */ + { 8, 7, 12, 0, 0, 18432, 84, }, /* 374 */ + { 8, 7, 12, 0, 0, 18432, 156, }, /* 375 */ + { 8, 12, 3, 0, 0, 26624, 98, }, /* 376 */ + { 8, 12, 3, 0, 0, 26624, 158, }, /* 377 */ + { 107, 12, 3, 0, 0, 26804, 98, }, /* 378 */ + { 107, 12, 3, 0, 0, 26808, 98, }, /* 379 */ + { 100, 21, 12, 0, 0, 18620, 128, }, /* 380 */ + { 100, 21, 12, 0, 0, 18624, 128, }, /* 381 */ + { 8, 13, 12, 0, 0, 18628, 144, }, /* 382 */ + { 8, 21, 12, 0, 0, 18432, 74, }, /* 383 */ + { 8, 6, 12, 0, 0, 18432, 94, }, /* 384 */ + { 9, 7, 12, 0, 0, 18432, 84, }, /* 385 */ + { 9, 12, 3, 0, 0, 26624, 106, }, /* 386 */ + { 9, 10, 5, 0, 0, 18432, 154, }, /* 387 */ + { 9, 7, 12, 0, 0, 18432, 156, }, /* 388 */ + { 9, 12, 3, 0, 0, 26624, 98, }, /* 389 */ + { 9, 10, 3, 0, 0, 18432, 160, }, /* 390 */ + { 9, 12, 3, 0, 0, 26624, 158, }, /* 391 */ + { 9, 13, 12, 0, 0, 18632, 144, }, /* 392 */ + { 9, 23, 12, 0, 0, 14336, 74, }, /* 393 */ + { 9, 15, 12, 0, 0, 18432, 74, }, /* 394 */ + { 9, 26, 12, 0, 0, 18432, 74, }, /* 395 */ + { 9, 21, 12, 0, 0, 18432, 74, }, /* 396 */ + { 9, 12, 3, 0, 0, 26624, 104, }, /* 397 */ + { 10, 12, 3, 0, 0, 26624, 106, }, /* 398 */ + { 10, 10, 5, 0, 0, 18432, 154, }, /* 399 */ + { 10, 7, 12, 0, 0, 18432, 84, }, /* 400 */ + { 10, 12, 3, 0, 0, 26624, 98, }, /* 401 */ + { 10, 12, 3, 0, 0, 26624, 158, }, /* 402 */ + { 10, 13, 12, 0, 0, 18636, 144, }, /* 403 */ + { 10, 12, 3, 0, 0, 26624, 162, }, /* 404 */ + { 10, 21, 12, 0, 0, 18432, 74, }, /* 405 */ + { 11, 12, 3, 0, 0, 26624, 106, }, /* 406 */ + { 11, 10, 5, 0, 0, 18432, 154, }, /* 407 */ + { 11, 7, 12, 0, 0, 18432, 84, }, /* 408 */ + { 11, 7, 12, 0, 0, 18432, 156, }, /* 409 */ + { 11, 12, 3, 0, 0, 26624, 98, }, /* 410 */ + { 11, 12, 3, 0, 0, 26624, 158, }, /* 411 */ + { 11, 13, 12, 0, 0, 18640, 144, }, /* 412 */ + { 11, 21, 12, 0, 0, 18432, 74, }, /* 413 */ + { 11, 23, 12, 0, 0, 14336, 74, }, /* 414 */ + { 11, 12, 3, 0, 0, 26624, 162, }, /* 415 */ + { 12, 12, 3, 0, 0, 26624, 106, }, /* 416 */ + { 12, 10, 5, 0, 0, 18432, 154, }, /* 417 */ + { 12, 7, 12, 0, 0, 18432, 84, }, /* 418 */ + { 12, 7, 12, 0, 0, 18432, 156, }, /* 419 */ + { 12, 12, 3, 0, 0, 26624, 98, }, /* 420 */ + { 12, 10, 3, 0, 0, 18432, 160, }, /* 421 */ + { 12, 12, 3, 0, 0, 26624, 158, }, /* 422 */ + { 12, 12, 3, 0, 0, 26624, 164, }, /* 423 */ + { 12, 13, 12, 0, 0, 18432, 144, }, /* 424 */ + { 12, 26, 12, 0, 0, 18432, 74, }, /* 425 */ + { 12, 15, 12, 0, 0, 18432, 74, }, /* 426 */ + { 13, 12, 3, 0, 0, 26624, 106, }, /* 427 */ + { 13, 7, 12, 0, 0, 18432, 84, }, /* 428 */ + { 13, 10, 3, 0, 0, 18432, 160, }, /* 429 */ + { 13, 10, 5, 0, 0, 18432, 154, }, /* 430 */ + { 13, 12, 3, 0, 0, 26624, 158, }, /* 431 */ + { 13, 13, 12, 0, 0, 18644, 144, }, /* 432 */ + { 13, 15, 12, 0, 0, 18644, 74, }, /* 433 */ + { 13, 26, 12, 0, 0, 28884, 74, }, /* 434 */ + { 13, 26, 12, 0, 0, 28672, 74, }, /* 435 */ + { 13, 23, 12, 0, 0, 14336, 74, }, /* 436 */ + { 14, 12, 3, 0, 0, 26624, 106, }, /* 437 */ + { 14, 10, 5, 0, 0, 18432, 154, }, /* 438 */ + { 14, 7, 12, 0, 0, 18432, 84, }, /* 439 */ + { 14, 7, 12, 0, 0, 18432, 156, }, /* 440 */ + { 14, 12, 3, 0, 0, 26624, 98, }, /* 441 */ + { 14, 12, 3, 0, 0, 26624, 158, }, /* 442 */ + { 14, 13, 12, 0, 0, 18432, 144, }, /* 443 */ + { 14, 21, 12, 0, 0, 18432, 74, }, /* 444 */ + { 14, 15, 12, 0, 0, 28672, 74, }, /* 445 */ + { 14, 26, 12, 0, 0, 18432, 74, }, /* 446 */ + { 15, 7, 12, 0, 0, 18432, 84, }, /* 447 */ + { 15, 12, 3, 0, 0, 26624, 106, }, /* 448 */ + { 15, 10, 5, 0, 0, 18432, 154, }, /* 449 */ + { 15, 21, 12, 0, 0, 18432, 74, }, /* 450 */ + { 15, 12, 3, 0, 0, 26624, 98, }, /* 451 */ + { 15, 12, 3, 0, 0, 18432, 106, }, /* 452 */ + { 15, 10, 3, 0, 0, 18432, 160, }, /* 453 */ + { 15, 12, 3, 0, 0, 26624, 158, }, /* 454 */ + { 15, 13, 12, 0, 0, 18648, 144, }, /* 455 */ + { 16, 12, 3, 0, 0, 26624, 106, }, /* 456 */ + { 16, 10, 5, 0, 0, 18432, 154, }, /* 457 */ + { 16, 7, 12, 0, 0, 18432, 84, }, /* 458 */ + { 16, 7, 12, 0, 0, 18432, 156, }, /* 459 */ + { 16, 12, 3, 0, 0, 26624, 158, }, /* 460 */ + { 16, 10, 3, 0, 0, 18432, 160, }, /* 461 */ + { 16, 7, 4, 0, 0, 18432, 84, }, /* 462 */ + { 16, 26, 12, 0, 0, 18432, 74, }, /* 463 */ + { 16, 15, 12, 0, 0, 18432, 74, }, /* 464 */ + { 16, 13, 12, 0, 0, 18432, 144, }, /* 465 */ + { 17, 12, 3, 0, 0, 26624, 106, }, /* 466 */ + { 17, 10, 5, 0, 0, 18432, 154, }, /* 467 */ + { 17, 7, 12, 0, 0, 18432, 84, }, /* 468 */ + { 17, 12, 3, 0, 0, 26624, 158, }, /* 469 */ + { 17, 10, 3, 0, 0, 18432, 160, }, /* 470 */ + { 17, 13, 12, 0, 0, 18432, 144, }, /* 471 */ + { 17, 21, 12, 0, 0, 18432, 74, }, /* 472 */ + { 18, 7, 12, 0, 0, 18432, 84, }, /* 473 */ + { 18, 12, 3, 0, 0, 26624, 106, }, /* 474 */ + { 18, 7, 5, 0, 0, 18432, 166, }, /* 475 */ + { 18, 12, 3, 0, 0, 26624, 168, }, /* 476 */ + { 100, 23, 12, 0, 0, 14336, 74, }, /* 477 */ + { 18, 7, 12, 0, 0, 18432, 170, }, /* 478 */ + { 18, 6, 12, 0, 0, 18432, 138, }, /* 479 */ + { 18, 12, 3, 0, 0, 26624, 98, }, /* 480 */ + { 18, 21, 12, 0, 0, 18432, 74, }, /* 481 */ + { 18, 13, 12, 0, 0, 18432, 144, }, /* 482 */ + { 18, 21, 12, 0, 0, 18432, 110, }, /* 483 */ + { 101, 7, 12, 0, 0, 18432, 84, }, /* 484 */ + { 101, 12, 3, 0, 0, 26624, 106, }, /* 485 */ + { 101, 7, 5, 0, 0, 18432, 166, }, /* 486 */ + { 101, 12, 3, 0, 0, 26624, 158, }, /* 487 */ + { 101, 7, 12, 0, 0, 18432, 170, }, /* 488 */ + { 101, 6, 12, 0, 0, 18432, 138, }, /* 489 */ + { 101, 12, 3, 0, 0, 26624, 98, }, /* 490 */ + { 101, 12, 3, 0, 0, 26624, 104, }, /* 491 */ + { 101, 13, 12, 0, 0, 18432, 144, }, /* 492 */ + { 19, 7, 12, 0, 0, 18432, 84, }, /* 493 */ + { 19, 26, 12, 0, 0, 18432, 74, }, /* 494 */ + { 19, 21, 12, 0, 0, 18432, 74, }, /* 495 */ + { 19, 21, 12, 0, 0, 18432, 110, }, /* 496 */ + { 19, 12, 3, 0, 0, 26624, 98, }, /* 497 */ + { 19, 13, 12, 0, 0, 18432, 144, }, /* 498 */ + { 19, 15, 12, 0, 0, 18432, 74, }, /* 499 */ + { 19, 22, 12, 0, 0, 28672, 172, }, /* 500 */ + { 19, 18, 12, 0, 0, 28672, 172, }, /* 501 */ + { 19, 10, 5, 0, 0, 18432, 174, }, /* 502 */ + { 19, 12, 3, 0, 0, 26624, 106, }, /* 503 */ + { 19, 12, 3, 0, 0, 26624, 176, }, /* 504 */ + { 19, 10, 5, 0, 0, 18432, 154, }, /* 505 */ + { 19, 12, 3, 0, 0, 26624, 132, }, /* 506 */ + { 19, 12, 3, 0, 0, 26624, 158, }, /* 507 */ + { 100, 26, 12, 0, 0, 18432, 74, }, /* 508 */ + { 20, 7, 12, 0, 0, 18432, 156, }, /* 509 */ + { 20, 10, 12, 0, 0, 18432, 154, }, /* 510 */ + { 20, 12, 3, 0, 0, 26624, 106, }, /* 511 */ + { 20, 10, 5, 0, 0, 18432, 154, }, /* 512 */ + { 20, 12, 3, 0, 0, 26624, 98, }, /* 513 */ + { 20, 12, 3, 0, 0, 26624, 158, }, /* 514 */ + { 20, 13, 12, 0, 0, 18652, 144, }, /* 515 */ + { 20, 21, 12, 0, 0, 18432, 128, }, /* 516 */ + { 20, 21, 12, 0, 0, 18432, 74, }, /* 517 */ + { 20, 10, 12, 0, 0, 18432, 178, }, /* 518 */ + { 20, 12, 3, 0, 0, 26624, 132, }, /* 519 */ + { 20, 13, 12, 0, 0, 18432, 144, }, /* 520 */ + { 20, 26, 12, 0, 0, 18432, 74, }, /* 521 */ + { 21, 9, 12, 0, 7264, 18432, 76, }, /* 522 */ + { 21, 5, 12, 0, 3008, 18432, 180, }, /* 523 */ + { 100, 21, 12, 0, 0, 18656, 74, }, /* 524 */ + { 21, 6, 12, 0, 0, 18432, 182, }, /* 525 */ + { 22, 7, 6, 0, 0, 18432, 84, }, /* 526 */ + { 22, 7, 6, 0, 0, 18432, 184, }, /* 527 */ + { 22, 7, 7, 0, 0, 18432, 184, }, /* 528 */ + { 22, 7, 7, 0, 0, 18432, 84, }, /* 529 */ + { 22, 7, 8, 0, 0, 18432, 84, }, /* 530 */ + { 23, 7, 12, 0, 0, 18432, 84, }, /* 531 */ + { 23, 12, 3, 0, 0, 26624, 98, }, /* 532 */ + { 23, 21, 12, 0, 0, 18432, 74, }, /* 533 */ + { 23, 21, 12, 0, 0, 18432, 110, }, /* 534 */ + { 23, 21, 12, 0, 0, 18432, 128, }, /* 535 */ + { 23, 15, 12, 0, 0, 18432, 144, }, /* 536 */ + { 23, 15, 12, 0, 0, 18432, 74, }, /* 537 */ + { 23, 26, 12, 0, 0, 28672, 74, }, /* 538 */ + { 24, 9, 12, 0, 38864, 18432, 186, }, /* 539 */ + { 24, 9, 12, 0, 8, 18432, 186, }, /* 540 */ + { 24, 5, 12, 0, -8, 18432, 70, }, /* 541 */ + { 102, 17, 12, 0, 0, 28672, 130, }, /* 542 */ + { 102, 7, 12, 0, 0, 18432, 84, }, /* 543 */ + { 102, 26, 12, 0, 0, 18432, 74, }, /* 544 */ + { 102, 21, 12, 0, 0, 18432, 128, }, /* 545 */ + { 103, 29, 12, 0, 0, 45056, 52, }, /* 546 */ + { 103, 7, 12, 0, 0, 18432, 84, }, /* 547 */ + { 103, 22, 12, 0, 0, 28672, 172, }, /* 548 */ + { 103, 18, 12, 0, 0, 28672, 172, }, /* 549 */ + { 25, 7, 12, 0, 0, 18432, 84, }, /* 550 */ + { 100, 21, 12, 0, 0, 18660, 110, }, /* 551 */ + { 25, 14, 12, 0, 0, 18432, 84, }, /* 552 */ + { 33, 7, 12, 0, 0, 18432, 84, }, /* 553 */ + { 33, 12, 3, 0, 0, 26624, 106, }, /* 554 */ + { 33, 12, 3, 0, 0, 26624, 158, }, /* 555 */ + { 33, 10, 3, 0, 0, 18432, 188, }, /* 556 */ + { 34, 7, 12, 0, 0, 18432, 84, }, /* 557 */ + { 34, 12, 3, 0, 0, 26624, 106, }, /* 558 */ + { 34, 10, 3, 0, 0, 18432, 188, }, /* 559 */ + { 100, 21, 12, 0, 0, 18664, 128, }, /* 560 */ + { 35, 7, 12, 0, 0, 18432, 84, }, /* 561 */ + { 35, 12, 3, 0, 0, 26624, 106, }, /* 562 */ + { 36, 7, 12, 0, 0, 18432, 84, }, /* 563 */ + { 36, 12, 3, 0, 0, 26624, 106, }, /* 564 */ + { 104, 7, 12, 0, 0, 18432, 156, }, /* 565 */ + { 104, 7, 12, 0, 0, 18432, 190, }, /* 566 */ + { 104, 12, 3, 0, 0, 26624, 102, }, /* 567 */ + { 104, 10, 5, 0, 0, 18432, 154, }, /* 568 */ + { 104, 12, 3, 0, 0, 26624, 106, }, /* 569 */ + { 104, 12, 3, 0, 0, 26624, 98, }, /* 570 */ + { 104, 12, 3, 0, 0, 26624, 158, }, /* 571 */ + { 104, 21, 12, 0, 0, 18432, 128, }, /* 572 */ + { 104, 21, 12, 0, 0, 18432, 110, }, /* 573 */ + { 104, 6, 12, 0, 0, 18432, 148, }, /* 574 */ + { 104, 21, 12, 0, 0, 18432, 74, }, /* 575 */ + { 104, 23, 12, 0, 0, 14336, 74, }, /* 576 */ + { 104, 7, 12, 0, 0, 18432, 84, }, /* 577 */ + { 104, 13, 12, 0, 0, 18432, 144, }, /* 578 */ + { 104, 15, 12, 0, 0, 28672, 74, }, /* 579 */ + { 26, 21, 12, 0, 0, 28672, 74, }, /* 580 */ + { 100, 21, 12, 0, 0, 28908, 110, }, /* 581 */ + { 100, 21, 12, 0, 0, 28908, 128, }, /* 582 */ + { 26, 21, 12, 0, 0, 28672, 110, }, /* 583 */ + { 26, 17, 12, 0, 0, 28672, 130, }, /* 584 */ + { 26, 21, 12, 0, 0, 28672, 128, }, /* 585 */ + { 26, 21, 12, 0, 0, 28672, 192, }, /* 586 */ + { 26, 12, 3, 0, 0, 26624, 194, }, /* 587 */ + { 26, 1, 2, 0, 0, 6144, 66, }, /* 588 */ + { 26, 13, 12, 0, 0, 18432, 144, }, /* 589 */ + { 26, 7, 12, 0, 0, 18432, 84, }, /* 590 */ + { 26, 6, 12, 0, 0, 18432, 138, }, /* 591 */ + { 26, 12, 3, 0, 0, 26624, 196, }, /* 592 */ + { 26, 12, 3, 0, 0, 26624, 106, }, /* 593 */ + { 37, 7, 12, 0, 0, 18432, 84, }, /* 594 */ + { 37, 12, 3, 0, 0, 26624, 106, }, /* 595 */ + { 37, 10, 5, 0, 0, 18432, 154, }, /* 596 */ + { 37, 12, 3, 0, 0, 26624, 98, }, /* 597 */ + { 37, 26, 12, 0, 0, 28672, 74, }, /* 598 */ + { 37, 21, 12, 0, 0, 28672, 128, }, /* 599 */ + { 37, 13, 12, 0, 0, 18432, 144, }, /* 600 */ + { 38, 7, 12, 0, 0, 18432, 84, }, /* 601 */ + { 111, 7, 12, 0, 0, 18432, 84, }, /* 602 */ + { 111, 7, 12, 0, 0, 18432, 170, }, /* 603 */ + { 111, 13, 12, 0, 0, 18432, 144, }, /* 604 */ + { 111, 15, 12, 0, 0, 18432, 144, }, /* 605 */ + { 111, 26, 12, 0, 0, 28672, 74, }, /* 606 */ + { 104, 26, 12, 0, 0, 28672, 74, }, /* 607 */ + { 42, 7, 12, 0, 0, 18432, 84, }, /* 608 */ + { 42, 12, 3, 0, 0, 26624, 106, }, /* 609 */ + { 42, 10, 5, 0, 0, 18432, 154, }, /* 610 */ + { 42, 21, 12, 0, 0, 18432, 74, }, /* 611 */ + { 124, 7, 12, 0, 0, 18432, 156, }, /* 612 */ + { 124, 10, 5, 0, 0, 18432, 154, }, /* 613 */ + { 124, 12, 3, 0, 0, 26624, 106, }, /* 614 */ + { 124, 12, 3, 0, 0, 26624, 158, }, /* 615 */ + { 124, 10, 12, 0, 0, 18432, 154, }, /* 616 */ + { 124, 12, 3, 0, 0, 26624, 98, }, /* 617 */ + { 124, 13, 12, 0, 0, 18432, 144, }, /* 618 */ + { 124, 21, 12, 0, 0, 18432, 74, }, /* 619 */ + { 124, 6, 12, 0, 0, 18432, 138, }, /* 620 */ + { 124, 21, 12, 0, 0, 18432, 128, }, /* 621 */ + { 107, 11, 3, 0, 0, 26624, 198, }, /* 622 */ + { 107, 12, 3, 0, 0, 26624, 106, }, /* 623 */ + { 114, 12, 3, 0, 0, 26624, 106, }, /* 624 */ + { 114, 10, 5, 0, 0, 18432, 154, }, /* 625 */ + { 114, 7, 12, 0, 0, 18432, 84, }, /* 626 */ + { 114, 7, 12, 0, 0, 18432, 156, }, /* 627 */ + { 114, 12, 3, 0, 0, 26624, 98, }, /* 628 */ + { 114, 10, 3, 0, 0, 18432, 160, }, /* 629 */ + { 114, 10, 3, 0, 0, 18432, 188, }, /* 630 */ + { 114, 21, 12, 0, 0, 18432, 128, }, /* 631 */ + { 114, 13, 12, 0, 0, 18432, 144, }, /* 632 */ + { 114, 21, 12, 0, 0, 18432, 74, }, /* 633 */ + { 114, 21, 12, 0, 0, 18432, 110, }, /* 634 */ + { 114, 26, 12, 0, 0, 18432, 74, }, /* 635 */ + { 117, 12, 3, 0, 0, 26624, 106, }, /* 636 */ + { 117, 10, 5, 0, 0, 18432, 154, }, /* 637 */ + { 117, 7, 12, 0, 0, 18432, 156, }, /* 638 */ + { 117, 10, 3, 0, 0, 18432, 188, }, /* 639 */ + { 117, 12, 3, 0, 0, 26624, 158, }, /* 640 */ + { 117, 13, 12, 0, 0, 18432, 144, }, /* 641 */ + { 117, 7, 12, 0, 0, 18432, 84, }, /* 642 */ + { 133, 7, 12, 0, 0, 18432, 84, }, /* 643 */ + { 133, 12, 3, 0, 0, 26624, 98, }, /* 644 */ + { 133, 10, 5, 0, 0, 18432, 154, }, /* 645 */ + { 133, 12, 3, 0, 0, 26624, 106, }, /* 646 */ + { 133, 10, 3, 0, 0, 18432, 188, }, /* 647 */ + { 133, 21, 12, 0, 0, 18432, 74, }, /* 648 */ + { 118, 7, 12, 0, 0, 18432, 84, }, /* 649 */ + { 118, 10, 5, 0, 0, 18432, 154, }, /* 650 */ + { 118, 12, 3, 0, 0, 26624, 106, }, /* 651 */ + { 118, 12, 3, 0, 0, 26624, 200, }, /* 652 */ + { 118, 12, 3, 0, 0, 26624, 98, }, /* 653 */ + { 118, 21, 12, 0, 0, 18432, 128, }, /* 654 */ + { 118, 21, 12, 0, 0, 18432, 110, }, /* 655 */ { 118, 13, 12, 0, 0, 18432, 144, }, /* 656 */ - { 118, 7, 12, 0, 0, 18432, 84, }, /* 657 */ - { 118, 6, 12, 0, 0, 18432, 94, }, /* 658 */ - { 118, 6, 12, 0, 0, 18432, 96, }, /* 659 */ - { 118, 21, 12, 0, 0, 18432, 128, }, /* 660 */ - { 2, 5, 12, 63, -6222, 18432, 70, }, /* 661 */ - { 2, 5, 12, 67, -6221, 18432, 70, }, /* 662 */ - { 2, 5, 12, 71, -6212, 18432, 70, }, /* 663 */ - { 2, 5, 12, 75, -6210, 18432, 70, }, /* 664 */ - { 2, 5, 12, 79, -6210, 18432, 70, }, /* 665 */ - { 2, 5, 12, 79, -6211, 18432, 70, }, /* 666 */ - { 2, 5, 12, 84, -6204, 18432, 70, }, /* 667 */ - { 2, 5, 12, 88, -6180, 18432, 70, }, /* 668 */ - { 2, 5, 12, 108, 35267, 18432, 70, }, /* 669 */ - { 21, 9, 12, 0, -3008, 18432, 76, }, /* 670 */ - { 116, 21, 12, 0, 0, 18432, 74, }, /* 671 */ - { 106, 12, 3, 0, 0, 26864, 98, }, /* 672 */ - { 106, 12, 3, 0, 0, 26868, 98, }, /* 673 */ - { 99, 21, 12, 0, 0, 18680, 200, }, /* 674 */ - { 106, 12, 3, 0, 0, 26876, 98, }, /* 675 */ - { 106, 12, 3, 0, 0, 26880, 98, }, /* 676 */ - { 106, 12, 3, 0, 0, 26884, 98, }, /* 677 */ - { 99, 10, 5, 0, 0, 18684, 174, }, /* 678 */ - { 99, 7, 12, 0, 0, 18696, 84, }, /* 679 */ - { 99, 7, 12, 0, 0, 18684, 84, }, /* 680 */ - { 99, 7, 12, 0, 0, 18676, 84, }, /* 681 */ - { 99, 7, 12, 0, 0, 18700, 84, }, /* 682 */ - { 99, 7, 12, 0, 0, 18704, 84, }, /* 683 */ - { 106, 12, 3, 0, 0, 26900, 98, }, /* 684 */ - { 99, 10, 5, 0, 0, 18712, 174, }, /* 685 */ - { 106, 12, 3, 0, 0, 26896, 98, }, /* 686 */ - { 99, 7, 12, 0, 0, 18716, 84, }, /* 687 */ - { 2, 5, 12, 0, 0, 18432, 60, }, /* 688 */ - { 1, 6, 12, 0, 0, 18432, 90, }, /* 689 */ - { 2, 6, 12, 0, 0, 18432, 182, }, /* 690 */ - { 0, 5, 12, 0, 35332, 18432, 78, }, /* 691 */ - { 0, 5, 12, 0, 3814, 18432, 78, }, /* 692 */ - { 0, 5, 12, 0, 35384, 18432, 78, }, /* 693 */ - { 0, 5, 12, 0, 0, 18432, 202, }, /* 694 */ - { 0, 6, 12, 0, 0, 18432, 182, }, /* 695 */ - { 0, 6, 12, 0, 0, 18432, 204, }, /* 696 */ - { 1, 6, 12, 0, 0, 18432, 182, }, /* 697 */ - { 106, 12, 3, 0, 0, 26740, 104, }, /* 698 */ - { 106, 12, 3, 0, 0, 26912, 98, }, /* 699 */ - { 106, 12, 3, 0, 0, 26916, 98, }, /* 700 */ - { 0, 9, 12, 92, 1, 18432, 76, }, /* 701 */ - { 0, 5, 12, 92, -1, 18432, 78, }, /* 702 */ - { 0, 5, 12, 0, 0, 18432, 70, }, /* 703 */ - { 0, 5, 12, 92, -58, 18432, 70, }, /* 704 */ - { 0, 9, 12, 0, -7615, 18432, 76, }, /* 705 */ - { 1, 5, 12, 0, 8, 18432, 78, }, /* 706 */ - { 1, 9, 12, 0, -8, 18432, 76, }, /* 707 */ - { 1, 5, 12, 0, 0, 18432, 78, }, /* 708 */ - { 1, 5, 12, 0, 74, 18432, 78, }, /* 709 */ - { 1, 5, 12, 0, 86, 18432, 78, }, /* 710 */ - { 1, 5, 12, 0, 100, 18432, 78, }, /* 711 */ - { 1, 5, 12, 0, 128, 18432, 78, }, /* 712 */ - { 1, 5, 12, 0, 112, 18432, 78, }, /* 713 */ - { 1, 5, 12, 0, 126, 18432, 78, }, /* 714 */ - { 1, 5, 12, 0, 8, 18432, 70, }, /* 715 */ - { 1, 8, 12, 0, -8, 18432, 88, }, /* 716 */ - { 1, 5, 12, 0, 0, 18432, 70, }, /* 717 */ - { 1, 5, 12, 0, 9, 18432, 70, }, /* 718 */ - { 1, 9, 12, 0, -74, 18432, 76, }, /* 719 */ - { 1, 8, 12, 0, -9, 18432, 88, }, /* 720 */ - { 1, 5, 12, 21, -7173, 18432, 78, }, /* 721 */ - { 1, 9, 12, 0, -86, 18432, 76, }, /* 722 */ - { 1, 5, 12, 0, -7235, 18432, 78, }, /* 723 */ - { 1, 9, 12, 0, -100, 18432, 76, }, /* 724 */ - { 1, 5, 12, 0, -7219, 18432, 78, }, /* 725 */ - { 1, 9, 12, 0, -112, 18432, 76, }, /* 726 */ - { 1, 9, 12, 0, -128, 18432, 76, }, /* 727 */ - { 1, 9, 12, 0, -126, 18432, 76, }, /* 728 */ - { 99, 29, 12, 0, 0, 45056, 52, }, /* 729 */ - { 106, 1, 3, 0, 0, 6144, 206, }, /* 730 */ - { 106, 1, 13, 0, 0, 6144, 208, }, /* 731 */ - { 99, 1, 2, 0, 0, 18432, 210, }, /* 732 */ - { 99, 1, 2, 0, 0, 34816, 210, }, /* 733 */ - { 99, 17, 12, 0, 0, 28672, 212, }, /* 734 */ - { 99, 21, 12, 0, 0, 28672, 64, }, /* 735 */ - { 99, 20, 12, 0, 0, 28672, 214, }, /* 736 */ - { 99, 19, 12, 0, 0, 28672, 214, }, /* 737 */ - { 99, 22, 12, 0, 0, 28672, 216, }, /* 738 */ - { 99, 20, 12, 0, 0, 28672, 216, }, /* 739 */ - { 99, 19, 12, 0, 0, 28672, 216, }, /* 740 */ - { 99, 21, 12, 0, 0, 28672, 218, }, /* 741 */ - { 99, 21, 12, 0, 0, 28672, 220, }, /* 742 */ - { 99, 27, 2, 0, 0, 45056, 50, }, /* 743 */ - { 99, 28, 2, 0, 0, 4096, 50, }, /* 744 */ - { 99, 1, 2, 0, 0, 20480, 136, }, /* 745 */ - { 99, 1, 2, 0, 0, 36864, 136, }, /* 746 */ - { 99, 1, 2, 0, 0, 30720, 136, }, /* 747 */ - { 99, 1, 2, 0, 0, 24576, 136, }, /* 748 */ - { 99, 1, 2, 0, 0, 40960, 136, }, /* 749 */ - { 99, 29, 12, 0, 0, 8488, 52, }, /* 750 */ - { 99, 21, 12, 0, 0, 14336, 54, }, /* 751 */ - { 99, 21, 12, 0, 0, 14336, 64, }, /* 752 */ - { 99, 21, 14, 0, 0, 28672, 222, }, /* 753 */ - { 99, 21, 12, 0, 0, 28672, 224, }, /* 754 */ - { 99, 16, 12, 0, 0, 28672, 144, }, /* 755 */ - { 99, 16, 12, 0, 0, 28672, 226, }, /* 756 */ - { 99, 25, 12, 0, 0, 8192, 64, }, /* 757 */ - { 99, 22, 12, 0, 0, 28672, 228, }, /* 758 */ - { 99, 18, 12, 0, 0, 28672, 228, }, /* 759 */ - { 99, 21, 12, 0, 0, 28972, 54, }, /* 760 */ - { 99, 21, 12, 0, 0, 28672, 212, }, /* 761 */ - { 99, 21, 12, 0, 0, 28976, 54, }, /* 762 */ - { 99, 21, 12, 0, 0, 28980, 54, }, /* 763 */ - { 99, 1, 2, 0, 0, 6144, 230, }, /* 764 */ - { 98, 2, 2, 0, 0, 6144, 232, }, /* 765 */ - { 99, 1, 2, 0, 0, 22528, 136, }, /* 766 */ - { 99, 1, 2, 0, 0, 38912, 136, }, /* 767 */ - { 99, 1, 2, 0, 0, 16384, 136, }, /* 768 */ - { 99, 1, 2, 0, 0, 32768, 136, }, /* 769 */ - { 99, 1, 2, 0, 0, 6144, 234, }, /* 770 */ - { 99, 25, 12, 0, 0, 12288, 236, }, /* 771 */ - { 99, 25, 12, 0, 0, 12288, 238, }, /* 772 */ - { 99, 25, 12, 0, 0, 28672, 236, }, /* 773 */ - { 99, 22, 12, 0, 0, 28672, 240, }, /* 774 */ - { 99, 18, 12, 0, 0, 28672, 240, }, /* 775 */ - { 98, 2, 12, 0, 0, 14336, 0, }, /* 776 */ - { 106, 12, 3, 0, 0, 26624, 242, }, /* 777 */ - { 106, 11, 3, 0, 0, 26624, 124, }, /* 778 */ - { 106, 11, 3, 0, 0, 26624, 244, }, /* 779 */ - { 106, 12, 3, 0, 0, 26936, 104, }, /* 780 */ - { 99, 26, 12, 0, 0, 28672, 74, }, /* 781 */ - { 99, 9, 12, 0, 0, 18432, 116, }, /* 782 */ - { 99, 5, 12, 0, 0, 18432, 246, }, /* 783 */ - { 99, 25, 12, 0, 0, 28672, 248, }, /* 784 */ - { 99, 26, 14, 0, 0, 28672, 250, }, /* 785 */ - { 1, 9, 12, 96, -7517, 18432, 76, }, /* 786 */ - { 99, 26, 12, 0, 0, 28672, 122, }, /* 787 */ - { 0, 9, 12, 100, 0, 18432, 76, }, /* 788 */ - { 0, 9, 12, 104, -8262, 18432, 76, }, /* 789 */ - { 99, 26, 12, 0, 0, 14336, 252, }, /* 790 */ - { 0, 9, 12, 0, 28, 18432, 76, }, /* 791 */ - { 99, 7, 12, 0, 0, 18432, 254, }, /* 792 */ - { 99, 5, 14, 0, 0, 18432, 256, }, /* 793 */ - { 99, 25, 12, 0, 0, 28672, 122, }, /* 794 */ - { 99, 5, 12, 0, 0, 18432, 258, }, /* 795 */ - { 0, 5, 12, 0, -28, 18432, 78, }, /* 796 */ - { 0, 14, 12, 0, 16, 18432, 76, }, /* 797 */ - { 0, 14, 12, 0, -16, 18432, 78, }, /* 798 */ - { 0, 14, 12, 0, 0, 18432, 84, }, /* 799 */ - { 99, 25, 14, 0, 0, 28672, 260, }, /* 800 */ - { 99, 26, 14, 0, 0, 28672, 260, }, /* 801 */ - { 99, 26, 12, 0, 0, 28672, 64, }, /* 802 */ - { 99, 25, 12, 0, 0, 28672, 262, }, /* 803 */ - { 99, 25, 12, 0, 0, 28672, 264, }, /* 804 */ - { 99, 25, 12, 0, 0, 12288, 266, }, /* 805 */ - { 99, 22, 12, 0, 0, 28672, 264, }, /* 806 */ - { 99, 18, 12, 0, 0, 28672, 264, }, /* 807 */ - { 99, 26, 14, 0, 0, 28672, 268, }, /* 808 */ - { 99, 22, 12, 0, 0, 28672, 270, }, /* 809 */ - { 99, 18, 12, 0, 0, 28672, 270, }, /* 810 */ - { 99, 26, 12, 0, 0, 18432, 54, }, /* 811 */ - { 99, 26, 14, 0, 0, 28672, 272, }, /* 812 */ - { 98, 2, 12, 0, 0, 18432, 274, }, /* 813 */ - { 99, 15, 12, 0, 0, 10240, 74, }, /* 814 */ - { 99, 26, 12, 0, 26, 18432, 276, }, /* 815 */ - { 99, 26, 14, 0, 26, 18432, 278, }, /* 816 */ - { 99, 26, 12, 0, -26, 18432, 280, }, /* 817 */ - { 99, 25, 14, 0, 0, 28672, 282, }, /* 818 */ - { 99, 26, 14, 0, 0, 28672, 284, }, /* 819 */ - { 99, 26, 14, 0, 0, 28672, 286, }, /* 820 */ - { 99, 25, 14, 0, 0, 28672, 284, }, /* 821 */ - { 99, 26, 14, 0, 0, 18432, 272, }, /* 822 */ - { 99, 26, 14, 0, 0, 28672, 288, }, /* 823 */ - { 109, 26, 12, 0, 0, 18432, 54, }, /* 824 */ - { 99, 26, 12, 0, 0, 28672, 228, }, /* 825 */ - { 44, 9, 12, 0, 48, 18432, 76, }, /* 826 */ - { 44, 5, 12, 0, -48, 18432, 78, }, /* 827 */ - { 0, 9, 12, 0, -10743, 18432, 76, }, /* 828 */ - { 0, 9, 12, 0, -3814, 18432, 76, }, /* 829 */ - { 0, 9, 12, 0, -10727, 18432, 76, }, /* 830 */ - { 0, 5, 12, 0, -10795, 18432, 78, }, /* 831 */ - { 0, 5, 12, 0, -10792, 18432, 78, }, /* 832 */ - { 0, 9, 12, 0, -10780, 18432, 76, }, /* 833 */ - { 0, 9, 12, 0, -10749, 18432, 76, }, /* 834 */ - { 0, 9, 12, 0, -10783, 18432, 76, }, /* 835 */ - { 0, 9, 12, 0, -10782, 18432, 76, }, /* 836 */ - { 0, 9, 12, 0, -10815, 18432, 76, }, /* 837 */ - { 43, 5, 12, 0, 0, 18432, 60, }, /* 838 */ - { 43, 26, 12, 0, 0, 28672, 74, }, /* 839 */ - { 43, 12, 3, 0, 0, 26624, 98, }, /* 840 */ - { 43, 21, 12, 0, 0, 28672, 128, }, /* 841 */ - { 43, 21, 12, 0, 0, 28672, 74, }, /* 842 */ - { 43, 15, 12, 0, 0, 28672, 74, }, /* 843 */ - { 21, 5, 12, 0, -7264, 18432, 78, }, /* 844 */ - { 45, 7, 12, 0, 0, 18432, 84, }, /* 845 */ - { 45, 6, 12, 0, 0, 18432, 148, }, /* 846 */ - { 45, 21, 12, 0, 0, 18432, 74, }, /* 847 */ - { 45, 12, 3, 0, 0, 26624, 290, }, /* 848 */ - { 2, 12, 3, 0, 0, 26624, 106, }, /* 849 */ - { 99, 20, 12, 0, 0, 28672, 228, }, /* 850 */ - { 99, 19, 12, 0, 0, 28672, 228, }, /* 851 */ - { 99, 17, 12, 0, 0, 28988, 212, }, /* 852 */ - { 99, 6, 12, 0, 0, 28672, 292, }, /* 853 */ - { 99, 21, 12, 0, 0, 28992, 54, }, /* 854 */ - { 99, 21, 12, 0, 0, 28996, 54, }, /* 855 */ - { 99, 21, 12, 0, 0, 29000, 224, }, /* 856 */ - { 99, 21, 12, 0, 0, 29004, 294, }, /* 857 */ - { 99, 21, 12, 0, 0, 28812, 54, }, /* 858 */ - { 99, 21, 12, 0, 0, 28672, 294, }, /* 859 */ - { 30, 26, 12, 0, 0, 28672, 296, }, /* 860 */ - { 99, 26, 12, 0, 0, 29008, 298, }, /* 861 */ - { 99, 26, 12, 0, 0, 29008, 300, }, /* 862 */ - { 99, 26, 12, 0, 0, 29008, 302, }, /* 863 */ - { 99, 21, 12, 0, 0, 29012, 294, }, /* 864 */ - { 99, 21, 12, 0, 0, 29016, 224, }, /* 865 */ - { 99, 21, 12, 0, 0, 29020, 54, }, /* 866 */ - { 30, 6, 12, 0, 0, 18432, 138, }, /* 867 */ - { 99, 7, 12, 0, 0, 18784, 304, }, /* 868 */ - { 30, 14, 12, 0, 0, 18432, 304, }, /* 869 */ - { 99, 22, 12, 0, 0, 29028, 228, }, /* 870 */ - { 99, 18, 12, 0, 0, 29028, 228, }, /* 871 */ - { 99, 22, 12, 0, 0, 29032, 228, }, /* 872 */ - { 99, 18, 12, 0, 0, 29032, 228, }, /* 873 */ - { 99, 22, 12, 0, 0, 29036, 62, }, /* 874 */ - { 99, 18, 12, 0, 0, 29036, 62, }, /* 875 */ - { 99, 22, 12, 0, 0, 29036, 228, }, /* 876 */ - { 99, 18, 12, 0, 0, 29036, 228, }, /* 877 */ - { 99, 26, 12, 0, 0, 29020, 54, }, /* 878 */ - { 99, 17, 12, 0, 0, 29020, 212, }, /* 879 */ - { 99, 22, 12, 0, 0, 29020, 216, }, /* 880 */ - { 99, 18, 12, 0, 0, 29020, 216, }, /* 881 */ - { 106, 12, 3, 0, 0, 26992, 98, }, /* 882 */ - { 22, 10, 3, 0, 0, 18432, 306, }, /* 883 */ - { 99, 17, 14, 0, 0, 29020, 308, }, /* 884 */ - { 99, 6, 12, 0, 0, 18804, 138, }, /* 885 */ - { 99, 26, 12, 0, 0, 29020, 74, }, /* 886 */ - { 30, 6, 12, 0, 0, 18432, 148, }, /* 887 */ - { 99, 7, 12, 0, 0, 18808, 84, }, /* 888 */ - { 99, 21, 14, 0, 0, 29048, 250, }, /* 889 */ - { 99, 26, 12, 0, 0, 29024, 74, }, /* 890 */ - { 27, 7, 12, 0, 0, 18432, 84, }, /* 891 */ - { 106, 12, 3, 0, 0, 26996, 98, }, /* 892 */ - { 99, 24, 12, 0, 0, 29044, 310, }, /* 893 */ - { 27, 6, 12, 0, 0, 18432, 138, }, /* 894 */ - { 99, 17, 12, 0, 0, 29044, 130, }, /* 895 */ - { 28, 7, 12, 0, 0, 18432, 84, }, /* 896 */ - { 99, 21, 12, 0, 0, 29036, 144, }, /* 897 */ - { 99, 6, 12, 0, 0, 18804, 96, }, /* 898 */ - { 28, 6, 12, 0, 0, 18432, 138, }, /* 899 */ - { 29, 7, 12, 0, 0, 18432, 84, }, /* 900 */ - { 22, 7, 12, 0, 0, 18432, 84, }, /* 901 */ - { 22, 7, 12, 0, 0, 18432, 184, }, /* 902 */ - { 99, 26, 12, 0, 0, 18784, 74, }, /* 903 */ - { 99, 15, 12, 0, 0, 18784, 74, }, /* 904 */ - { 22, 26, 12, 0, 0, 18432, 74, }, /* 905 */ - { 22, 26, 12, 0, 0, 28672, 74, }, /* 906 */ - { 99, 15, 12, 0, 0, 18432, 74, }, /* 907 */ - { 99, 26, 14, 0, 0, 18784, 250, }, /* 908 */ - { 28, 26, 12, 0, 0, 18432, 74, }, /* 909 */ - { 30, 7, 12, 0, 0, 18432, 312, }, /* 910 */ - { 31, 7, 12, 0, 0, 18432, 84, }, /* 911 */ - { 31, 6, 12, 0, 0, 18432, 138, }, /* 912 */ - { 31, 26, 12, 0, 0, 28672, 74, }, /* 913 */ - { 55, 7, 12, 0, 0, 18432, 84, }, /* 914 */ - { 55, 6, 12, 0, 0, 18432, 148, }, /* 915 */ - { 55, 21, 12, 0, 0, 18432, 110, }, /* 916 */ - { 55, 21, 12, 0, 0, 18432, 128, }, /* 917 */ - { 119, 7, 12, 0, 0, 18432, 84, }, /* 918 */ - { 119, 6, 12, 0, 0, 18432, 138, }, /* 919 */ - { 119, 21, 12, 0, 0, 28672, 110, }, /* 920 */ - { 119, 21, 12, 0, 0, 28672, 128, }, /* 921 */ - { 119, 13, 12, 0, 0, 18432, 144, }, /* 922 */ - { 2, 9, 12, 108, 1, 18432, 76, }, /* 923 */ - { 2, 5, 12, 108, -35267, 18432, 78, }, /* 924 */ - { 2, 7, 12, 0, 0, 18432, 84, }, /* 925 */ - { 2, 21, 12, 0, 0, 28672, 74, }, /* 926 */ - { 2, 12, 3, 0, 0, 26624, 98, }, /* 927 */ - { 2, 6, 12, 0, 0, 28672, 94, }, /* 928 */ - { 2, 6, 12, 0, 0, 18432, 90, }, /* 929 */ - { 126, 7, 12, 0, 0, 18432, 84, }, /* 930 */ - { 126, 14, 12, 0, 0, 18432, 84, }, /* 931 */ - { 126, 12, 3, 0, 0, 26624, 98, }, /* 932 */ - { 126, 21, 12, 0, 0, 18432, 74, }, /* 933 */ - { 126, 21, 12, 0, 0, 18432, 128, }, /* 934 */ - { 126, 21, 12, 0, 0, 18432, 110, }, /* 935 */ - { 99, 24, 12, 0, 0, 29052, 56, }, /* 936 */ - { 0, 9, 12, 0, -35332, 18432, 76, }, /* 937 */ - { 99, 24, 12, 0, 0, 18432, 56, }, /* 938 */ - { 0, 9, 12, 0, -42280, 18432, 76, }, /* 939 */ - { 0, 5, 12, 0, 48, 18432, 78, }, /* 940 */ - { 0, 9, 12, 0, -42308, 18432, 76, }, /* 941 */ - { 0, 9, 12, 0, -42319, 18432, 76, }, /* 942 */ - { 0, 9, 12, 0, -42315, 18432, 76, }, /* 943 */ - { 0, 9, 12, 0, -42305, 18432, 76, }, /* 944 */ - { 0, 9, 12, 0, -42258, 18432, 76, }, /* 945 */ - { 0, 9, 12, 0, -42282, 18432, 76, }, /* 946 */ - { 0, 9, 12, 0, -42261, 18432, 76, }, /* 947 */ - { 0, 9, 12, 0, 928, 18432, 76, }, /* 948 */ - { 0, 9, 12, 0, -48, 18432, 76, }, /* 949 */ - { 0, 9, 12, 0, -42307, 18432, 76, }, /* 950 */ - { 0, 9, 12, 0, -35384, 18432, 76, }, /* 951 */ - { 0, 9, 12, 0, -42343, 18432, 76, }, /* 952 */ - { 0, 9, 12, 0, -42561, 18432, 76, }, /* 953 */ - { 46, 7, 12, 0, 0, 18432, 84, }, /* 954 */ - { 46, 12, 3, 0, 0, 26624, 106, }, /* 955 */ - { 46, 12, 3, 0, 0, 26624, 158, }, /* 956 */ - { 46, 10, 5, 0, 0, 18432, 154, }, /* 957 */ - { 46, 26, 12, 0, 0, 28672, 74, }, /* 958 */ - { 99, 15, 12, 0, 0, 18816, 74, }, /* 959 */ - { 99, 15, 12, 0, 0, 18820, 74, }, /* 960 */ - { 99, 26, 12, 0, 0, 18824, 74, }, /* 961 */ - { 99, 23, 12, 0, 0, 14732, 74, }, /* 962 */ - { 99, 26, 12, 0, 0, 14728, 74, }, /* 963 */ - { 47, 7, 12, 0, 0, 18432, 84, }, /* 964 */ - { 47, 21, 12, 0, 0, 28672, 74, }, /* 965 */ - { 47, 21, 12, 0, 0, 28672, 128, }, /* 966 */ - { 120, 10, 5, 0, 0, 18432, 154, }, /* 967 */ - { 120, 7, 12, 0, 0, 18432, 84, }, /* 968 */ - { 120, 12, 3, 0, 0, 26624, 158, }, /* 969 */ - { 120, 12, 3, 0, 0, 26624, 106, }, /* 970 */ - { 120, 21, 12, 0, 0, 18432, 128, }, /* 971 */ - { 120, 13, 12, 0, 0, 18432, 144, }, /* 972 */ - { 8, 12, 3, 0, 0, 27024, 98, }, /* 973 */ - { 8, 7, 12, 0, 0, 18836, 84, }, /* 974 */ - { 49, 13, 12, 0, 0, 18432, 144, }, /* 975 */ - { 49, 7, 12, 0, 0, 18432, 84, }, /* 976 */ - { 49, 12, 3, 0, 0, 26624, 106, }, /* 977 */ - { 49, 12, 3, 0, 0, 26624, 98, }, /* 978 */ - { 99, 21, 12, 0, 0, 18840, 200, }, /* 979 */ - { 49, 21, 12, 0, 0, 18432, 128, }, /* 980 */ - { 121, 7, 12, 0, 0, 18432, 84, }, /* 981 */ - { 121, 12, 3, 0, 0, 26624, 106, }, /* 982 */ - { 121, 10, 5, 0, 0, 18432, 154, }, /* 983 */ - { 121, 10, 3, 0, 0, 18432, 188, }, /* 984 */ - { 121, 21, 12, 0, 0, 18432, 74, }, /* 985 */ - { 56, 12, 3, 0, 0, 26624, 106, }, /* 986 */ - { 56, 10, 5, 0, 0, 18432, 154, }, /* 987 */ - { 56, 7, 12, 0, 0, 18432, 84, }, /* 988 */ - { 56, 12, 3, 0, 0, 26624, 98, }, /* 989 */ - { 56, 10, 3, 0, 0, 18432, 188, }, /* 990 */ - { 56, 21, 12, 0, 0, 18432, 74, }, /* 991 */ - { 56, 21, 12, 0, 0, 18432, 110, }, /* 992 */ - { 56, 21, 12, 0, 0, 18432, 128, }, /* 993 */ - { 99, 6, 12, 0, 0, 18844, 138, }, /* 994 */ - { 56, 13, 12, 0, 0, 18432, 144, }, /* 995 */ - { 20, 6, 12, 0, 0, 18432, 138, }, /* 996 */ - { 122, 7, 12, 0, 0, 18432, 84, }, /* 997 */ - { 122, 12, 3, 0, 0, 26624, 106, }, /* 998 */ - { 122, 10, 5, 0, 0, 18432, 154, }, /* 999 */ - { 122, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ - { 122, 21, 12, 0, 0, 18432, 74, }, /* 1001 */ - { 122, 21, 12, 0, 0, 18432, 128, }, /* 1002 */ - { 124, 7, 12, 0, 0, 18432, 84, }, /* 1003 */ - { 124, 12, 3, 0, 0, 26624, 106, }, /* 1004 */ - { 124, 7, 12, 0, 0, 18432, 170, }, /* 1005 */ - { 124, 12, 3, 0, 0, 26624, 98, }, /* 1006 */ - { 124, 7, 12, 0, 0, 18432, 314, }, /* 1007 */ - { 124, 6, 12, 0, 0, 18432, 138, }, /* 1008 */ - { 124, 21, 12, 0, 0, 18432, 74, }, /* 1009 */ - { 124, 21, 12, 0, 0, 18432, 110, }, /* 1010 */ - { 127, 7, 12, 0, 0, 18432, 84, }, /* 1011 */ - { 127, 10, 5, 0, 0, 18432, 154, }, /* 1012 */ - { 127, 12, 3, 0, 0, 26624, 106, }, /* 1013 */ - { 127, 21, 12, 0, 0, 18432, 128, }, /* 1014 */ - { 127, 6, 12, 0, 0, 18432, 138, }, /* 1015 */ - { 127, 12, 3, 0, 0, 26624, 158, }, /* 1016 */ - { 0, 5, 12, 0, -928, 18432, 78, }, /* 1017 */ - { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1018 */ - { 127, 10, 5, 0, 0, 18432, 174, }, /* 1019 */ - { 127, 13, 12, 0, 0, 18432, 144, }, /* 1020 */ - { 22, 7, 9, 0, 0, 18432, 84, }, /* 1021 */ - { 22, 7, 10, 0, 0, 18432, 84, }, /* 1022 */ - { 98, 4, 12, 0, 0, 18432, 0, }, /* 1023 */ - { 98, 3, 12, 0, 0, 18432, 0, }, /* 1024 */ - { 30, 7, 12, 0, 0, 18432, 304, }, /* 1025 */ - { 0, 5, 12, 0, 1, 18432, 70, }, /* 1026 */ - { 0, 5, 12, 0, -1, 18432, 70, }, /* 1027 */ - { 4, 25, 12, 0, 0, 12288, 122, }, /* 1028 */ - { 5, 7, 12, 0, 0, 0, 316, }, /* 1029 */ - { 99, 18, 12, 0, 0, 29088, 54, }, /* 1030 */ - { 99, 22, 12, 0, 0, 29088, 54, }, /* 1031 */ - { 98, 2, 12, 0, 0, 6144, 318, }, /* 1032 */ - { 5, 7, 12, 0, 0, 420, 84, }, /* 1033 */ - { 5, 26, 12, 0, 0, 29092, 74, }, /* 1034 */ - { 106, 12, 3, 0, 0, 26624, 192, }, /* 1035 */ - { 106, 12, 3, 0, 0, 26624, 320, }, /* 1036 */ - { 99, 21, 12, 0, 0, 28672, 74, }, /* 1037 */ - { 99, 21, 12, 0, 0, 28672, 128, }, /* 1038 */ - { 99, 21, 12, 0, 0, 28672, 126, }, /* 1039 */ - { 99, 22, 12, 0, 0, 28672, 74, }, /* 1040 */ - { 99, 18, 12, 0, 0, 28672, 74, }, /* 1041 */ - { 99, 17, 12, 0, 0, 28672, 130, }, /* 1042 */ - { 99, 22, 12, 0, 0, 28672, 322, }, /* 1043 */ - { 99, 18, 12, 0, 0, 28672, 322, }, /* 1044 */ - { 99, 21, 12, 0, 0, 8192, 110, }, /* 1045 */ - { 99, 21, 12, 0, 0, 8192, 324, }, /* 1046 */ - { 99, 21, 12, 0, 0, 8192, 326, }, /* 1047 */ - { 99, 22, 12, 0, 0, 28672, 172, }, /* 1048 */ - { 99, 18, 12, 0, 0, 28672, 172, }, /* 1049 */ - { 99, 21, 12, 0, 0, 14336, 74, }, /* 1050 */ - { 99, 21, 12, 0, 0, 28672, 122, }, /* 1051 */ - { 99, 25, 12, 0, 0, 12288, 122, }, /* 1052 */ - { 99, 17, 12, 0, 0, 12288, 328, }, /* 1053 */ - { 99, 25, 12, 0, 0, 28672, 330, }, /* 1054 */ - { 99, 21, 12, 0, 0, 28672, 322, }, /* 1055 */ - { 99, 21, 12, 0, 0, 28672, 332, }, /* 1056 */ - { 99, 17, 12, 0, 0, 12288, 130, }, /* 1057 */ - { 99, 21, 12, 0, 0, 8192, 74, }, /* 1058 */ - { 99, 13, 12, 0, 0, 10240, 334, }, /* 1059 */ - { 0, 9, 12, 0, 32, 18432, 336, }, /* 1060 */ - { 99, 24, 12, 0, 0, 28672, 338, }, /* 1061 */ - { 0, 5, 12, 0, -32, 18432, 340, }, /* 1062 */ - { 99, 21, 12, 0, 0, 29036, 128, }, /* 1063 */ - { 99, 22, 12, 0, 0, 29036, 342, }, /* 1064 */ - { 99, 18, 12, 0, 0, 29036, 342, }, /* 1065 */ - { 99, 21, 12, 0, 0, 29036, 110, }, /* 1066 */ - { 99, 6, 3, 0, 0, 18804, 344, }, /* 1067 */ - { 99, 1, 2, 0, 0, 28672, 346, }, /* 1068 */ - { 39, 7, 12, 0, 0, 18432, 84, }, /* 1069 */ - { 99, 21, 12, 0, 0, 18856, 74, }, /* 1070 */ - { 99, 21, 12, 0, 0, 29096, 74, }, /* 1071 */ - { 99, 21, 12, 0, 0, 18860, 74, }, /* 1072 */ - { 99, 15, 12, 0, 0, 18864, 74, }, /* 1073 */ - { 99, 26, 12, 0, 0, 18860, 74, }, /* 1074 */ - { 1, 14, 12, 0, 0, 28672, 84, }, /* 1075 */ - { 1, 15, 12, 0, 0, 28672, 74, }, /* 1076 */ - { 1, 26, 12, 0, 0, 28672, 74, }, /* 1077 */ - { 1, 26, 12, 0, 0, 18432, 74, }, /* 1078 */ - { 50, 7, 12, 0, 0, 18432, 84, }, /* 1079 */ - { 51, 7, 12, 0, 0, 18432, 84, }, /* 1080 */ - { 106, 12, 3, 0, 0, 27060, 98, }, /* 1081 */ - { 99, 15, 12, 0, 0, 10676, 74, }, /* 1082 */ - { 104, 7, 12, 0, 0, 18432, 84, }, /* 1083 */ - { 104, 15, 12, 0, 0, 18432, 74, }, /* 1084 */ - { 32, 7, 12, 0, 0, 18432, 84, }, /* 1085 */ - { 32, 14, 12, 0, 0, 18432, 84, }, /* 1086 */ - { 73, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ - { 73, 12, 3, 0, 0, 26624, 106, }, /* 1088 */ - { 107, 7, 12, 0, 0, 18432, 84, }, /* 1089 */ - { 107, 21, 12, 0, 0, 18432, 110, }, /* 1090 */ - { 111, 7, 12, 0, 0, 18432, 84, }, /* 1091 */ - { 111, 21, 12, 0, 0, 18432, 110, }, /* 1092 */ - { 111, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ - { 105, 9, 12, 0, 40, 18432, 76, }, /* 1094 */ - { 105, 5, 12, 0, -40, 18432, 78, }, /* 1095 */ - { 40, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ - { 108, 7, 12, 0, 0, 18432, 84, }, /* 1097 */ - { 108, 13, 12, 0, 0, 18432, 144, }, /* 1098 */ - { 80, 9, 12, 0, 40, 18432, 76, }, /* 1099 */ - { 80, 5, 12, 0, -40, 18432, 78, }, /* 1100 */ - { 66, 7, 12, 0, 0, 18432, 84, }, /* 1101 */ - { 64, 7, 12, 0, 0, 18432, 84, }, /* 1102 */ - { 64, 21, 12, 0, 0, 18432, 74, }, /* 1103 */ - { 167, 9, 12, 0, 39, 18432, 76, }, /* 1104 */ - { 167, 5, 12, 0, -39, 18432, 78, }, /* 1105 */ - { 96, 7, 12, 0, 0, 18432, 84, }, /* 1106 */ - { 69, 7, 12, 0, 0, 18432, 84, }, /* 1107 */ - { 0, 6, 12, 0, 0, 18432, 96, }, /* 1108 */ - { 41, 7, 12, 0, 0, 34816, 84, }, /* 1109 */ - { 128, 7, 12, 0, 0, 34816, 84, }, /* 1110 */ - { 128, 21, 12, 0, 0, 34816, 110, }, /* 1111 */ - { 128, 15, 12, 0, 0, 34816, 74, }, /* 1112 */ - { 143, 7, 12, 0, 0, 34816, 84, }, /* 1113 */ - { 143, 26, 12, 0, 0, 34816, 74, }, /* 1114 */ - { 143, 15, 12, 0, 0, 34816, 74, }, /* 1115 */ - { 142, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ - { 142, 15, 12, 0, 0, 34816, 74, }, /* 1117 */ - { 149, 7, 12, 0, 0, 34816, 84, }, /* 1118 */ - { 149, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ - { 115, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ - { 115, 15, 12, 0, 0, 34816, 74, }, /* 1121 */ - { 115, 21, 12, 0, 0, 28672, 110, }, /* 1122 */ - { 52, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ - { 52, 21, 12, 0, 0, 34816, 74, }, /* 1124 */ - { 61, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ - { 134, 7, 12, 0, 0, 34816, 84, }, /* 1126 */ - { 134, 15, 12, 0, 0, 34816, 74, }, /* 1127 */ - { 112, 7, 12, 0, 0, 34816, 84, }, /* 1128 */ - { 112, 12, 3, 0, 0, 26624, 106, }, /* 1129 */ - { 112, 12, 3, 0, 0, 26624, 98, }, /* 1130 */ - { 112, 12, 3, 0, 0, 26624, 158, }, /* 1131 */ - { 112, 15, 12, 0, 0, 34816, 74, }, /* 1132 */ - { 112, 21, 12, 0, 0, 34816, 74, }, /* 1133 */ - { 112, 21, 12, 0, 0, 34816, 128, }, /* 1134 */ - { 129, 7, 12, 0, 0, 34816, 84, }, /* 1135 */ - { 129, 15, 12, 0, 0, 34816, 74, }, /* 1136 */ - { 129, 21, 12, 0, 0, 34816, 74, }, /* 1137 */ - { 141, 7, 12, 0, 0, 34816, 84, }, /* 1138 */ - { 141, 15, 12, 0, 0, 34816, 74, }, /* 1139 */ - { 71, 7, 12, 0, 0, 34816, 84, }, /* 1140 */ - { 71, 26, 12, 0, 0, 34816, 74, }, /* 1141 */ - { 71, 12, 3, 0, 0, 26624, 98, }, /* 1142 */ - { 71, 15, 12, 0, 0, 34816, 74, }, /* 1143 */ - { 71, 21, 12, 0, 0, 34816, 110, }, /* 1144 */ - { 71, 21, 12, 0, 0, 35256, 110, }, /* 1145 */ - { 71, 21, 12, 0, 0, 34816, 74, }, /* 1146 */ - { 53, 7, 12, 0, 0, 34816, 84, }, /* 1147 */ - { 53, 21, 12, 0, 0, 28672, 74, }, /* 1148 */ - { 53, 21, 12, 0, 0, 28672, 110, }, /* 1149 */ - { 130, 7, 12, 0, 0, 34816, 84, }, /* 1150 */ - { 130, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ - { 131, 7, 12, 0, 0, 34816, 84, }, /* 1152 */ - { 131, 15, 12, 0, 0, 34816, 74, }, /* 1153 */ - { 74, 7, 12, 0, 0, 34816, 84, }, /* 1154 */ - { 74, 21, 12, 0, 0, 34816, 110, }, /* 1155 */ - { 74, 15, 12, 0, 0, 34816, 74, }, /* 1156 */ - { 57, 7, 12, 0, 0, 34816, 84, }, /* 1157 */ - { 78, 9, 12, 0, 64, 34816, 76, }, /* 1158 */ - { 78, 5, 12, 0, -64, 34816, 78, }, /* 1159 */ - { 78, 15, 12, 0, 0, 34816, 74, }, /* 1160 */ - { 85, 7, 12, 0, 0, 0, 84, }, /* 1161 */ - { 85, 7, 12, 0, 0, 0, 314, }, /* 1162 */ - { 85, 12, 3, 0, 0, 26624, 132, }, /* 1163 */ - { 85, 13, 12, 0, 0, 2048, 144, }, /* 1164 */ - { 92, 13, 12, 0, 0, 2048, 144, }, /* 1165 */ - { 92, 7, 12, 0, 0, 34816, 84, }, /* 1166 */ - { 92, 6, 12, 0, 0, 34816, 96, }, /* 1167 */ - { 92, 9, 12, 0, 32, 34816, 76, }, /* 1168 */ - { 92, 12, 3, 0, 0, 26624, 132, }, /* 1169 */ - { 92, 12, 3, 0, 0, 26624, 164, }, /* 1170 */ - { 92, 12, 3, 0, 0, 26624, 98, }, /* 1171 */ - { 92, 17, 12, 0, 0, 28672, 130, }, /* 1172 */ - { 92, 6, 12, 0, 0, 34816, 138, }, /* 1173 */ - { 92, 5, 12, 0, -32, 34816, 78, }, /* 1174 */ - { 92, 25, 12, 0, 0, 34816, 122, }, /* 1175 */ - { 5, 15, 12, 0, 0, 2048, 74, }, /* 1176 */ - { 88, 7, 12, 0, 0, 34816, 84, }, /* 1177 */ - { 88, 12, 3, 0, 0, 26624, 106, }, /* 1178 */ - { 88, 17, 12, 0, 0, 34816, 130, }, /* 1179 */ - { 159, 7, 12, 0, 0, 34816, 84, }, /* 1180 */ - { 159, 15, 12, 0, 0, 34816, 74, }, /* 1181 */ - { 86, 7, 12, 0, 0, 0, 84, }, /* 1182 */ - { 86, 12, 3, 0, 0, 26624, 98, }, /* 1183 */ - { 86, 15, 12, 0, 0, 0, 74, }, /* 1184 */ - { 86, 21, 12, 0, 0, 0, 128, }, /* 1185 */ - { 90, 7, 12, 0, 0, 34816, 84, }, /* 1186 */ - { 90, 12, 3, 0, 0, 26624, 98, }, /* 1187 */ - { 90, 21, 12, 0, 0, 34816, 128, }, /* 1188 */ - { 163, 7, 12, 0, 0, 34816, 84, }, /* 1189 */ - { 163, 15, 12, 0, 0, 34816, 74, }, /* 1190 */ - { 160, 7, 12, 0, 0, 34816, 84, }, /* 1191 */ - { 133, 10, 5, 0, 0, 18432, 154, }, /* 1192 */ - { 133, 12, 3, 0, 0, 26624, 106, }, /* 1193 */ - { 133, 7, 12, 0, 0, 18432, 84, }, /* 1194 */ - { 133, 12, 3, 0, 0, 26624, 158, }, /* 1195 */ - { 133, 21, 12, 0, 0, 18432, 128, }, /* 1196 */ - { 133, 21, 12, 0, 0, 18432, 110, }, /* 1197 */ - { 133, 15, 12, 0, 0, 28672, 74, }, /* 1198 */ - { 133, 13, 12, 0, 0, 18432, 144, }, /* 1199 */ - { 133, 12, 3, 0, 0, 26624, 290, }, /* 1200 */ - { 58, 12, 3, 0, 0, 26624, 106, }, /* 1201 */ - { 58, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ - { 58, 7, 12, 0, 0, 18432, 84, }, /* 1203 */ - { 58, 12, 3, 0, 0, 26624, 158, }, /* 1204 */ - { 58, 12, 3, 0, 0, 26624, 98, }, /* 1205 */ - { 58, 21, 12, 0, 0, 18432, 74, }, /* 1206 */ - { 58, 1, 4, 0, 0, 18432, 134, }, /* 1207 */ - { 58, 21, 12, 0, 0, 18432, 128, }, /* 1208 */ - { 136, 7, 12, 0, 0, 18432, 84, }, /* 1209 */ - { 136, 13, 12, 0, 0, 18432, 144, }, /* 1210 */ - { 60, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ - { 60, 7, 12, 0, 0, 18432, 84, }, /* 1212 */ - { 60, 10, 5, 0, 0, 18432, 154, }, /* 1213 */ - { 60, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ - { 60, 13, 12, 0, 0, 18432, 144, }, /* 1215 */ - { 60, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ - { 60, 21, 12, 0, 0, 18432, 128, }, /* 1217 */ - { 70, 7, 12, 0, 0, 18432, 84, }, /* 1218 */ - { 70, 12, 3, 0, 0, 26624, 98, }, /* 1219 */ - { 70, 21, 12, 0, 0, 18432, 74, }, /* 1220 */ - { 62, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ - { 62, 10, 5, 0, 0, 18432, 154, }, /* 1222 */ - { 62, 7, 12, 0, 0, 18432, 84, }, /* 1223 */ - { 62, 10, 3, 0, 0, 18432, 188, }, /* 1224 */ - { 62, 7, 4, 0, 0, 18432, 84, }, /* 1225 */ - { 62, 21, 12, 0, 0, 18432, 128, }, /* 1226 */ - { 62, 21, 12, 0, 0, 18432, 74, }, /* 1227 */ - { 62, 12, 3, 0, 0, 26624, 104, }, /* 1228 */ - { 62, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ - { 62, 13, 12, 0, 0, 18432, 144, }, /* 1230 */ - { 17, 15, 12, 0, 0, 18432, 74, }, /* 1231 */ - { 68, 7, 12, 0, 0, 18432, 84, }, /* 1232 */ - { 68, 10, 5, 0, 0, 18432, 154, }, /* 1233 */ - { 68, 12, 3, 0, 0, 26624, 106, }, /* 1234 */ - { 68, 10, 3, 0, 0, 18432, 188, }, /* 1235 */ - { 68, 12, 3, 0, 0, 26624, 98, }, /* 1236 */ - { 68, 12, 3, 0, 0, 26624, 162, }, /* 1237 */ - { 68, 21, 12, 0, 0, 18432, 128, }, /* 1238 */ - { 68, 21, 12, 0, 0, 18432, 110, }, /* 1239 */ - { 68, 21, 12, 0, 0, 18432, 74, }, /* 1240 */ - { 77, 7, 12, 0, 0, 18432, 84, }, /* 1241 */ - { 77, 21, 12, 0, 0, 18432, 128, }, /* 1242 */ - { 75, 7, 12, 0, 0, 18432, 84, }, /* 1243 */ - { 75, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ - { 75, 10, 5, 0, 0, 18432, 154, }, /* 1245 */ - { 75, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ - { 75, 12, 3, 0, 0, 26624, 158, }, /* 1247 */ - { 75, 13, 12, 0, 0, 18432, 144, }, /* 1248 */ - { 67, 12, 3, 0, 0, 26624, 106, }, /* 1249 */ - { 67, 12, 3, 0, 0, 26836, 106, }, /* 1250 */ - { 67, 10, 5, 0, 0, 18432, 154, }, /* 1251 */ - { 67, 10, 5, 0, 0, 18644, 154, }, /* 1252 */ - { 67, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ - { 106, 12, 3, 0, 0, 26836, 98, }, /* 1254 */ - { 67, 12, 3, 0, 0, 26836, 98, }, /* 1255 */ - { 67, 10, 3, 0, 0, 18432, 160, }, /* 1256 */ - { 67, 10, 3, 0, 0, 18432, 188, }, /* 1257 */ - { 67, 7, 12, 0, 0, 18432, 348, }, /* 1258 */ - { 67, 12, 3, 0, 0, 26624, 98, }, /* 1259 */ - { 97, 7, 12, 0, 0, 18432, 84, }, /* 1260 */ - { 97, 10, 3, 0, 0, 18432, 160, }, /* 1261 */ - { 97, 10, 5, 0, 0, 18432, 154, }, /* 1262 */ - { 97, 12, 3, 0, 0, 26624, 106, }, /* 1263 */ - { 97, 12, 3, 0, 0, 26624, 158, }, /* 1264 */ - { 97, 10, 3, 0, 0, 18432, 188, }, /* 1265 */ - { 97, 7, 4, 0, 0, 18432, 84, }, /* 1266 */ - { 97, 12, 3, 0, 0, 26624, 164, }, /* 1267 */ - { 97, 7, 12, 0, 0, 18432, 350, }, /* 1268 */ - { 97, 21, 12, 0, 0, 18432, 128, }, /* 1269 */ - { 97, 21, 12, 0, 0, 18432, 74, }, /* 1270 */ - { 97, 12, 3, 0, 0, 26624, 98, }, /* 1271 */ - { 153, 7, 12, 0, 0, 18432, 84, }, /* 1272 */ - { 153, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ - { 153, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ - { 153, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ - { 153, 12, 3, 0, 0, 26624, 98, }, /* 1276 */ - { 153, 21, 12, 0, 0, 18432, 128, }, /* 1277 */ - { 153, 21, 12, 0, 0, 18432, 110, }, /* 1278 */ - { 153, 21, 12, 0, 0, 18432, 74, }, /* 1279 */ - { 153, 13, 12, 0, 0, 18432, 144, }, /* 1280 */ - { 153, 12, 3, 0, 0, 26624, 104, }, /* 1281 */ - { 76, 7, 12, 0, 0, 18432, 84, }, /* 1282 */ - { 76, 10, 3, 0, 0, 18432, 160, }, /* 1283 */ - { 76, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ - { 76, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ - { 76, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ - { 76, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ - { 76, 21, 12, 0, 0, 18432, 74, }, /* 1288 */ - { 76, 13, 12, 0, 0, 18432, 144, }, /* 1289 */ - { 145, 7, 12, 0, 0, 18432, 84, }, /* 1290 */ - { 145, 10, 3, 0, 0, 18432, 160, }, /* 1291 */ - { 145, 10, 5, 0, 0, 18432, 154, }, /* 1292 */ - { 145, 12, 3, 0, 0, 26624, 106, }, /* 1293 */ - { 145, 12, 3, 0, 0, 26624, 158, }, /* 1294 */ - { 145, 12, 3, 0, 0, 26624, 98, }, /* 1295 */ - { 145, 21, 12, 0, 0, 18432, 74, }, /* 1296 */ - { 145, 21, 12, 0, 0, 18432, 128, }, /* 1297 */ - { 145, 21, 12, 0, 0, 18432, 110, }, /* 1298 */ - { 145, 21, 12, 0, 0, 18432, 190, }, /* 1299 */ - { 72, 7, 12, 0, 0, 18432, 84, }, /* 1300 */ - { 72, 10, 5, 0, 0, 18432, 154, }, /* 1301 */ - { 72, 12, 3, 0, 0, 26624, 106, }, /* 1302 */ - { 72, 12, 3, 0, 0, 26624, 158, }, /* 1303 */ - { 72, 21, 12, 0, 0, 18432, 128, }, /* 1304 */ - { 72, 21, 12, 0, 0, 18432, 74, }, /* 1305 */ - { 72, 13, 12, 0, 0, 18432, 144, }, /* 1306 */ - { 63, 7, 12, 0, 0, 18432, 84, }, /* 1307 */ - { 63, 12, 3, 0, 0, 26624, 106, }, /* 1308 */ - { 63, 10, 5, 0, 0, 18432, 154, }, /* 1309 */ - { 63, 10, 3, 0, 0, 18432, 188, }, /* 1310 */ - { 63, 12, 3, 0, 0, 26624, 98, }, /* 1311 */ - { 63, 21, 12, 0, 0, 18432, 74, }, /* 1312 */ - { 63, 13, 12, 0, 0, 18432, 144, }, /* 1313 */ - { 147, 7, 12, 0, 0, 18432, 84, }, /* 1314 */ - { 147, 12, 3, 0, 0, 26624, 106, }, /* 1315 */ - { 147, 10, 5, 0, 0, 18432, 154, }, /* 1316 */ - { 147, 10, 12, 0, 0, 18432, 154, }, /* 1317 */ - { 147, 12, 3, 0, 0, 26624, 158, }, /* 1318 */ - { 147, 13, 12, 0, 0, 18432, 144, }, /* 1319 */ - { 147, 15, 12, 0, 0, 18432, 74, }, /* 1320 */ - { 147, 21, 12, 0, 0, 18432, 128, }, /* 1321 */ - { 147, 26, 12, 0, 0, 18432, 74, }, /* 1322 */ - { 83, 7, 12, 0, 0, 18432, 84, }, /* 1323 */ - { 83, 10, 5, 0, 0, 18432, 154, }, /* 1324 */ - { 83, 12, 3, 0, 0, 26624, 106, }, /* 1325 */ - { 83, 12, 3, 0, 0, 26624, 158, }, /* 1326 */ - { 83, 12, 3, 0, 0, 26624, 98, }, /* 1327 */ - { 83, 21, 12, 0, 0, 18432, 74, }, /* 1328 */ - { 146, 9, 12, 0, 32, 18432, 76, }, /* 1329 */ - { 146, 5, 12, 0, -32, 18432, 78, }, /* 1330 */ - { 146, 13, 12, 0, 0, 18432, 144, }, /* 1331 */ - { 146, 15, 12, 0, 0, 18432, 74, }, /* 1332 */ - { 146, 7, 12, 0, 0, 18432, 84, }, /* 1333 */ - { 164, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ - { 164, 10, 3, 0, 0, 18432, 160, }, /* 1335 */ - { 164, 10, 5, 0, 0, 18432, 154, }, /* 1336 */ - { 164, 12, 3, 0, 0, 26624, 106, }, /* 1337 */ - { 164, 10, 3, 0, 0, 18432, 188, }, /* 1338 */ - { 164, 12, 3, 0, 0, 26624, 158, }, /* 1339 */ - { 164, 7, 4, 0, 0, 18432, 84, }, /* 1340 */ - { 164, 12, 3, 0, 0, 26624, 98, }, /* 1341 */ - { 164, 21, 12, 0, 0, 18432, 128, }, /* 1342 */ - { 164, 21, 12, 0, 0, 18432, 74, }, /* 1343 */ - { 164, 13, 12, 0, 0, 18432, 144, }, /* 1344 */ - { 87, 7, 12, 0, 0, 18432, 84, }, /* 1345 */ - { 87, 10, 5, 0, 0, 18432, 154, }, /* 1346 */ - { 87, 12, 3, 0, 0, 26624, 106, }, /* 1347 */ - { 87, 12, 3, 0, 0, 26624, 158, }, /* 1348 */ - { 87, 21, 12, 0, 0, 18432, 74, }, /* 1349 */ - { 156, 7, 12, 0, 0, 18432, 84, }, /* 1350 */ - { 156, 12, 3, 0, 0, 26624, 106, }, /* 1351 */ - { 156, 12, 3, 0, 0, 18432, 106, }, /* 1352 */ - { 156, 12, 3, 0, 0, 26624, 104, }, /* 1353 */ - { 156, 12, 3, 0, 0, 26624, 158, }, /* 1354 */ - { 156, 10, 5, 0, 0, 18432, 154, }, /* 1355 */ - { 156, 7, 4, 0, 0, 18432, 84, }, /* 1356 */ - { 156, 21, 12, 0, 0, 18432, 74, }, /* 1357 */ - { 156, 21, 12, 0, 0, 18432, 128, }, /* 1358 */ - { 155, 7, 12, 0, 0, 18432, 84, }, /* 1359 */ - { 155, 12, 3, 0, 0, 26624, 106, }, /* 1360 */ - { 155, 10, 5, 0, 0, 18432, 154, }, /* 1361 */ - { 155, 7, 4, 0, 0, 18432, 84, }, /* 1362 */ - { 155, 12, 3, 0, 0, 26624, 352, }, /* 1363 */ - { 155, 12, 3, 0, 0, 26624, 158, }, /* 1364 */ - { 155, 21, 12, 0, 0, 18432, 74, }, /* 1365 */ - { 155, 21, 12, 0, 0, 18432, 128, }, /* 1366 */ - { 155, 21, 12, 0, 0, 18432, 110, }, /* 1367 */ - { 144, 7, 12, 0, 0, 18432, 84, }, /* 1368 */ - { 95, 7, 12, 0, 0, 18432, 84, }, /* 1369 */ - { 95, 21, 12, 0, 0, 18432, 74, }, /* 1370 */ - { 95, 13, 12, 0, 0, 18432, 144, }, /* 1371 */ - { 151, 7, 12, 0, 0, 18432, 84, }, /* 1372 */ - { 151, 10, 5, 0, 0, 18432, 154, }, /* 1373 */ - { 151, 12, 3, 0, 0, 26624, 106, }, /* 1374 */ - { 151, 12, 3, 0, 0, 18432, 158, }, /* 1375 */ - { 151, 21, 12, 0, 0, 18432, 128, }, /* 1376 */ - { 151, 21, 12, 0, 0, 18432, 110, }, /* 1377 */ - { 151, 21, 12, 0, 0, 18432, 74, }, /* 1378 */ - { 151, 13, 12, 0, 0, 18432, 144, }, /* 1379 */ - { 151, 15, 12, 0, 0, 18432, 74, }, /* 1380 */ - { 152, 21, 12, 0, 0, 18432, 74, }, /* 1381 */ - { 152, 21, 12, 0, 0, 18432, 110, }, /* 1382 */ - { 152, 7, 12, 0, 0, 18432, 84, }, /* 1383 */ - { 152, 12, 3, 0, 0, 26624, 106, }, /* 1384 */ + { 119, 13, 12, 0, 0, 18432, 144, }, /* 657 */ + { 119, 7, 12, 0, 0, 18432, 84, }, /* 658 */ + { 119, 6, 12, 0, 0, 18432, 94, }, /* 659 */ + { 119, 6, 12, 0, 0, 18432, 96, }, /* 660 */ + { 119, 21, 12, 0, 0, 18432, 128, }, /* 661 */ + { 2, 5, 12, 63, -6222, 18432, 70, }, /* 662 */ + { 2, 5, 12, 67, -6221, 18432, 70, }, /* 663 */ + { 2, 5, 12, 71, -6212, 18432, 70, }, /* 664 */ + { 2, 5, 12, 75, -6210, 18432, 70, }, /* 665 */ + { 2, 5, 12, 79, -6210, 18432, 70, }, /* 666 */ + { 2, 5, 12, 79, -6211, 18432, 70, }, /* 667 */ + { 2, 5, 12, 84, -6204, 18432, 70, }, /* 668 */ + { 2, 5, 12, 88, -6180, 18432, 70, }, /* 669 */ + { 2, 5, 12, 108, 35267, 18432, 70, }, /* 670 */ + { 21, 9, 12, 0, -3008, 18432, 76, }, /* 671 */ + { 117, 21, 12, 0, 0, 18432, 74, }, /* 672 */ + { 107, 12, 3, 0, 0, 26864, 98, }, /* 673 */ + { 107, 12, 3, 0, 0, 26868, 98, }, /* 674 */ + { 100, 21, 12, 0, 0, 18680, 202, }, /* 675 */ + { 107, 12, 3, 0, 0, 26876, 98, }, /* 676 */ + { 107, 12, 3, 0, 0, 26880, 98, }, /* 677 */ + { 107, 12, 3, 0, 0, 26884, 98, }, /* 678 */ + { 107, 12, 3, 0, 0, 26888, 98, }, /* 679 */ + { 107, 12, 3, 0, 0, 26892, 98, }, /* 680 */ + { 107, 12, 3, 0, 0, 26896, 98, }, /* 681 */ + { 100, 10, 5, 0, 0, 18708, 174, }, /* 682 */ + { 107, 12, 3, 0, 0, 26904, 98, }, /* 683 */ + { 100, 7, 12, 0, 0, 18716, 84, }, /* 684 */ + { 100, 7, 12, 0, 0, 18720, 84, }, /* 685 */ + { 100, 7, 12, 0, 0, 18724, 84, }, /* 686 */ + { 100, 7, 12, 0, 0, 18676, 84, }, /* 687 */ + { 107, 12, 3, 0, 0, 26920, 98, }, /* 688 */ + { 100, 7, 12, 0, 0, 18732, 84, }, /* 689 */ + { 100, 7, 12, 0, 0, 18736, 84, }, /* 690 */ + { 107, 12, 3, 0, 0, 26932, 98, }, /* 691 */ + { 100, 7, 12, 0, 0, 18708, 84, }, /* 692 */ + { 100, 10, 5, 0, 0, 18744, 174, }, /* 693 */ + { 107, 12, 3, 0, 0, 26928, 98, }, /* 694 */ + { 100, 7, 12, 0, 0, 18748, 84, }, /* 695 */ + { 2, 5, 12, 0, 0, 18432, 60, }, /* 696 */ + { 1, 6, 12, 0, 0, 18432, 90, }, /* 697 */ + { 2, 6, 12, 0, 0, 18432, 182, }, /* 698 */ + { 0, 5, 12, 0, 35332, 18432, 78, }, /* 699 */ + { 0, 5, 12, 0, 3814, 18432, 78, }, /* 700 */ + { 0, 5, 12, 0, 35384, 18432, 78, }, /* 701 */ + { 0, 5, 12, 0, 0, 18432, 204, }, /* 702 */ + { 1, 6, 12, 0, 0, 18432, 182, }, /* 703 */ + { 107, 12, 3, 0, 0, 26740, 104, }, /* 704 */ + { 107, 12, 3, 0, 0, 26944, 98, }, /* 705 */ + { 107, 12, 3, 0, 0, 26948, 98, }, /* 706 */ + { 0, 9, 12, 92, 1, 18432, 76, }, /* 707 */ + { 0, 5, 12, 92, -1, 18432, 78, }, /* 708 */ + { 0, 5, 12, 0, 0, 18432, 70, }, /* 709 */ + { 0, 5, 12, 92, -58, 18432, 70, }, /* 710 */ + { 0, 9, 12, 0, -7615, 18432, 76, }, /* 711 */ + { 1, 5, 12, 0, 8, 18432, 78, }, /* 712 */ + { 1, 9, 12, 0, -8, 18432, 76, }, /* 713 */ + { 1, 5, 12, 0, 0, 18432, 78, }, /* 714 */ + { 1, 5, 12, 0, 74, 18432, 78, }, /* 715 */ + { 1, 5, 12, 0, 86, 18432, 78, }, /* 716 */ + { 1, 5, 12, 0, 100, 18432, 78, }, /* 717 */ + { 1, 5, 12, 0, 128, 18432, 78, }, /* 718 */ + { 1, 5, 12, 0, 112, 18432, 78, }, /* 719 */ + { 1, 5, 12, 0, 126, 18432, 78, }, /* 720 */ + { 1, 5, 12, 0, 8, 18432, 70, }, /* 721 */ + { 1, 8, 12, 0, -8, 18432, 88, }, /* 722 */ + { 1, 5, 12, 0, 0, 18432, 70, }, /* 723 */ + { 1, 5, 12, 0, 9, 18432, 70, }, /* 724 */ + { 1, 9, 12, 0, -74, 18432, 76, }, /* 725 */ + { 1, 8, 12, 0, -9, 18432, 88, }, /* 726 */ + { 1, 5, 12, 21, -7173, 18432, 78, }, /* 727 */ + { 1, 9, 12, 0, -86, 18432, 76, }, /* 728 */ + { 1, 5, 12, 0, -7235, 18432, 78, }, /* 729 */ + { 1, 9, 12, 0, -100, 18432, 76, }, /* 730 */ + { 1, 5, 12, 0, -7219, 18432, 78, }, /* 731 */ + { 1, 9, 12, 0, -112, 18432, 76, }, /* 732 */ + { 1, 9, 12, 0, -128, 18432, 76, }, /* 733 */ + { 1, 9, 12, 0, -126, 18432, 76, }, /* 734 */ + { 100, 29, 12, 0, 0, 45056, 52, }, /* 735 */ + { 107, 1, 3, 0, 0, 6144, 206, }, /* 736 */ + { 107, 1, 13, 0, 0, 6144, 208, }, /* 737 */ + { 100, 1, 2, 0, 0, 18432, 210, }, /* 738 */ + { 100, 1, 2, 0, 0, 34816, 210, }, /* 739 */ + { 100, 17, 12, 0, 0, 28672, 212, }, /* 740 */ + { 100, 21, 12, 0, 0, 28672, 64, }, /* 741 */ + { 100, 20, 12, 0, 0, 28672, 214, }, /* 742 */ + { 100, 19, 12, 0, 0, 28672, 214, }, /* 743 */ + { 100, 22, 12, 0, 0, 28672, 216, }, /* 744 */ + { 100, 20, 12, 0, 0, 28672, 216, }, /* 745 */ + { 100, 19, 12, 0, 0, 28672, 216, }, /* 746 */ + { 100, 21, 12, 0, 0, 28672, 218, }, /* 747 */ + { 100, 21, 12, 0, 0, 28672, 220, }, /* 748 */ + { 100, 27, 2, 0, 0, 45056, 50, }, /* 749 */ + { 100, 28, 2, 0, 0, 4096, 50, }, /* 750 */ + { 100, 1, 2, 0, 0, 20480, 136, }, /* 751 */ + { 100, 1, 2, 0, 0, 36864, 136, }, /* 752 */ + { 100, 1, 2, 0, 0, 30720, 136, }, /* 753 */ + { 100, 1, 2, 0, 0, 24576, 136, }, /* 754 */ + { 100, 1, 2, 0, 0, 40960, 136, }, /* 755 */ + { 100, 29, 12, 0, 0, 8520, 52, }, /* 756 */ + { 100, 21, 12, 0, 0, 14336, 54, }, /* 757 */ + { 100, 21, 12, 0, 0, 14336, 64, }, /* 758 */ + { 100, 21, 14, 0, 0, 28672, 222, }, /* 759 */ + { 100, 21, 12, 0, 0, 28672, 224, }, /* 760 */ + { 100, 16, 12, 0, 0, 28672, 144, }, /* 761 */ + { 100, 16, 12, 0, 0, 28672, 226, }, /* 762 */ + { 100, 25, 12, 0, 0, 8192, 64, }, /* 763 */ + { 100, 22, 12, 0, 0, 28672, 228, }, /* 764 */ + { 100, 18, 12, 0, 0, 28672, 228, }, /* 765 */ + { 100, 21, 12, 0, 0, 29004, 54, }, /* 766 */ + { 100, 21, 12, 0, 0, 28672, 212, }, /* 767 */ + { 100, 21, 12, 0, 0, 29008, 54, }, /* 768 */ + { 100, 21, 12, 0, 0, 29012, 54, }, /* 769 */ + { 100, 1, 2, 0, 0, 6144, 230, }, /* 770 */ + { 99, 2, 2, 0, 0, 6144, 232, }, /* 771 */ + { 100, 1, 2, 0, 0, 22528, 136, }, /* 772 */ + { 100, 1, 2, 0, 0, 38912, 136, }, /* 773 */ + { 100, 1, 2, 0, 0, 16384, 136, }, /* 774 */ + { 100, 1, 2, 0, 0, 32768, 136, }, /* 775 */ + { 100, 1, 2, 0, 0, 6144, 234, }, /* 776 */ + { 0, 6, 12, 0, 0, 18432, 236, }, /* 777 */ + { 100, 25, 12, 0, 0, 12288, 238, }, /* 778 */ + { 100, 25, 12, 0, 0, 12288, 240, }, /* 779 */ + { 100, 25, 12, 0, 0, 28672, 238, }, /* 780 */ + { 100, 22, 12, 0, 0, 28672, 242, }, /* 781 */ + { 100, 18, 12, 0, 0, 28672, 242, }, /* 782 */ + { 0, 6, 12, 0, 0, 18432, 182, }, /* 783 */ + { 99, 2, 12, 0, 0, 14336, 0, }, /* 784 */ + { 107, 12, 3, 0, 0, 26624, 244, }, /* 785 */ + { 107, 11, 3, 0, 0, 26624, 124, }, /* 786 */ + { 107, 11, 3, 0, 0, 26624, 246, }, /* 787 */ + { 107, 12, 3, 0, 0, 26968, 104, }, /* 788 */ + { 100, 26, 12, 0, 0, 28672, 74, }, /* 789 */ + { 100, 9, 12, 0, 0, 18432, 116, }, /* 790 */ + { 100, 5, 12, 0, 0, 18432, 248, }, /* 791 */ + { 100, 25, 12, 0, 0, 28672, 250, }, /* 792 */ + { 100, 26, 14, 0, 0, 28672, 252, }, /* 793 */ + { 1, 9, 12, 96, -7517, 18432, 76, }, /* 794 */ + { 100, 26, 12, 0, 0, 28672, 122, }, /* 795 */ + { 0, 9, 12, 100, 0, 18432, 76, }, /* 796 */ + { 0, 9, 12, 104, -8262, 18432, 76, }, /* 797 */ + { 100, 26, 12, 0, 0, 14336, 254, }, /* 798 */ + { 0, 9, 12, 0, 28, 18432, 76, }, /* 799 */ + { 100, 7, 12, 0, 0, 18432, 256, }, /* 800 */ + { 100, 5, 14, 0, 0, 18432, 258, }, /* 801 */ + { 100, 25, 12, 0, 0, 28672, 122, }, /* 802 */ + { 100, 5, 12, 0, 0, 18432, 260, }, /* 803 */ + { 0, 5, 12, 0, -28, 18432, 78, }, /* 804 */ + { 0, 14, 12, 0, 16, 18432, 76, }, /* 805 */ + { 0, 14, 12, 0, -16, 18432, 78, }, /* 806 */ + { 0, 14, 12, 0, 0, 18432, 84, }, /* 807 */ + { 100, 25, 14, 0, 0, 28672, 262, }, /* 808 */ + { 100, 26, 14, 0, 0, 28672, 262, }, /* 809 */ + { 100, 26, 12, 0, 0, 28672, 64, }, /* 810 */ + { 100, 25, 12, 0, 0, 28672, 264, }, /* 811 */ + { 100, 25, 12, 0, 0, 28672, 266, }, /* 812 */ + { 100, 25, 12, 0, 0, 12288, 268, }, /* 813 */ + { 100, 22, 12, 0, 0, 28672, 266, }, /* 814 */ + { 100, 18, 12, 0, 0, 28672, 266, }, /* 815 */ + { 100, 26, 14, 0, 0, 28672, 270, }, /* 816 */ + { 100, 22, 12, 0, 0, 28672, 272, }, /* 817 */ + { 100, 18, 12, 0, 0, 28672, 272, }, /* 818 */ + { 100, 26, 12, 0, 0, 18432, 54, }, /* 819 */ + { 99, 2, 12, 0, 0, 18432, 274, }, /* 820 */ + { 100, 15, 12, 0, 0, 10240, 74, }, /* 821 */ + { 100, 26, 12, 0, 26, 18432, 276, }, /* 822 */ + { 100, 26, 14, 0, 26, 18432, 278, }, /* 823 */ + { 100, 26, 12, 0, -26, 18432, 280, }, /* 824 */ + { 100, 25, 14, 0, 0, 28672, 282, }, /* 825 */ + { 100, 26, 14, 0, 0, 28672, 284, }, /* 826 */ + { 100, 26, 14, 0, 0, 28672, 286, }, /* 827 */ + { 110, 26, 12, 0, 0, 18432, 54, }, /* 828 */ + { 100, 26, 12, 0, 0, 28672, 228, }, /* 829 */ + { 44, 9, 12, 0, 48, 18432, 76, }, /* 830 */ + { 44, 5, 12, 0, -48, 18432, 78, }, /* 831 */ + { 0, 9, 12, 0, -10743, 18432, 76, }, /* 832 */ + { 0, 9, 12, 0, -3814, 18432, 76, }, /* 833 */ + { 0, 9, 12, 0, -10727, 18432, 76, }, /* 834 */ + { 0, 5, 12, 0, -10795, 18432, 78, }, /* 835 */ + { 0, 5, 12, 0, -10792, 18432, 78, }, /* 836 */ + { 0, 9, 12, 0, -10780, 18432, 76, }, /* 837 */ + { 0, 9, 12, 0, -10749, 18432, 76, }, /* 838 */ + { 0, 9, 12, 0, -10783, 18432, 76, }, /* 839 */ + { 0, 9, 12, 0, -10782, 18432, 76, }, /* 840 */ + { 0, 9, 12, 0, -10815, 18432, 76, }, /* 841 */ + { 43, 5, 12, 0, 0, 18432, 60, }, /* 842 */ + { 43, 26, 12, 0, 0, 28672, 74, }, /* 843 */ + { 43, 12, 3, 0, 0, 26624, 98, }, /* 844 */ + { 43, 21, 12, 0, 0, 28672, 128, }, /* 845 */ + { 43, 21, 12, 0, 0, 28672, 74, }, /* 846 */ + { 43, 15, 12, 0, 0, 28672, 74, }, /* 847 */ + { 21, 5, 12, 0, -7264, 18432, 78, }, /* 848 */ + { 45, 7, 12, 0, 0, 18432, 84, }, /* 849 */ + { 45, 6, 12, 0, 0, 18432, 148, }, /* 850 */ + { 45, 21, 12, 0, 0, 18432, 74, }, /* 851 */ + { 45, 12, 3, 0, 0, 26624, 288, }, /* 852 */ + { 2, 12, 3, 0, 0, 26624, 106, }, /* 853 */ + { 100, 20, 12, 0, 0, 28672, 228, }, /* 854 */ + { 100, 19, 12, 0, 0, 28672, 228, }, /* 855 */ + { 100, 17, 12, 0, 0, 29020, 212, }, /* 856 */ + { 100, 6, 12, 0, 0, 28672, 290, }, /* 857 */ + { 100, 21, 12, 0, 0, 29024, 54, }, /* 858 */ + { 100, 21, 12, 0, 0, 29028, 54, }, /* 859 */ + { 100, 21, 12, 0, 0, 29032, 224, }, /* 860 */ + { 100, 21, 12, 0, 0, 29036, 292, }, /* 861 */ + { 100, 21, 12, 0, 0, 28812, 54, }, /* 862 */ + { 100, 21, 12, 0, 0, 28672, 292, }, /* 863 */ + { 30, 26, 12, 0, 0, 28672, 294, }, /* 864 */ + { 100, 26, 12, 0, 0, 29040, 296, }, /* 865 */ + { 100, 26, 12, 0, 0, 29040, 298, }, /* 866 */ + { 100, 26, 12, 0, 0, 29040, 300, }, /* 867 */ + { 100, 21, 12, 0, 0, 29044, 292, }, /* 868 */ + { 100, 21, 12, 0, 0, 29048, 224, }, /* 869 */ + { 100, 21, 12, 0, 0, 29052, 54, }, /* 870 */ + { 30, 6, 12, 0, 0, 18432, 138, }, /* 871 */ + { 100, 7, 12, 0, 0, 18816, 302, }, /* 872 */ + { 30, 14, 12, 0, 0, 18432, 302, }, /* 873 */ + { 100, 22, 12, 0, 0, 29060, 228, }, /* 874 */ + { 100, 18, 12, 0, 0, 29060, 228, }, /* 875 */ + { 100, 22, 12, 0, 0, 29064, 228, }, /* 876 */ + { 100, 18, 12, 0, 0, 29064, 228, }, /* 877 */ + { 100, 22, 12, 0, 0, 29068, 62, }, /* 878 */ + { 100, 18, 12, 0, 0, 29068, 62, }, /* 879 */ + { 100, 22, 12, 0, 0, 29068, 228, }, /* 880 */ + { 100, 18, 12, 0, 0, 29068, 228, }, /* 881 */ + { 100, 26, 12, 0, 0, 29052, 54, }, /* 882 */ + { 100, 17, 12, 0, 0, 29052, 212, }, /* 883 */ + { 100, 22, 12, 0, 0, 29052, 216, }, /* 884 */ + { 100, 18, 12, 0, 0, 29052, 216, }, /* 885 */ + { 107, 12, 3, 0, 0, 27024, 98, }, /* 886 */ + { 22, 10, 3, 0, 0, 18432, 304, }, /* 887 */ + { 100, 17, 14, 0, 0, 29052, 306, }, /* 888 */ + { 100, 6, 12, 0, 0, 18836, 138, }, /* 889 */ + { 100, 26, 12, 0, 0, 29052, 74, }, /* 890 */ + { 30, 6, 12, 0, 0, 18432, 148, }, /* 891 */ + { 100, 7, 12, 0, 0, 18840, 84, }, /* 892 */ + { 100, 21, 14, 0, 0, 29080, 252, }, /* 893 */ + { 100, 26, 12, 0, 0, 29056, 74, }, /* 894 */ + { 27, 7, 12, 0, 0, 18432, 84, }, /* 895 */ + { 107, 12, 3, 0, 0, 27028, 98, }, /* 896 */ + { 100, 24, 12, 0, 0, 29076, 308, }, /* 897 */ + { 27, 6, 12, 0, 0, 18432, 138, }, /* 898 */ + { 100, 17, 12, 0, 0, 29076, 130, }, /* 899 */ + { 28, 7, 12, 0, 0, 18432, 84, }, /* 900 */ + { 100, 21, 12, 0, 0, 29068, 144, }, /* 901 */ + { 100, 6, 12, 0, 0, 18836, 96, }, /* 902 */ + { 28, 6, 12, 0, 0, 18432, 138, }, /* 903 */ + { 29, 7, 12, 0, 0, 18432, 84, }, /* 904 */ + { 22, 7, 12, 0, 0, 18432, 84, }, /* 905 */ + { 22, 7, 12, 0, 0, 18432, 184, }, /* 906 */ + { 100, 26, 12, 0, 0, 18816, 74, }, /* 907 */ + { 100, 15, 12, 0, 0, 18816, 74, }, /* 908 */ + { 22, 26, 12, 0, 0, 18432, 74, }, /* 909 */ + { 22, 26, 12, 0, 0, 28672, 74, }, /* 910 */ + { 100, 15, 12, 0, 0, 18432, 74, }, /* 911 */ + { 100, 26, 14, 0, 0, 18816, 252, }, /* 912 */ + { 28, 26, 12, 0, 0, 18432, 74, }, /* 913 */ + { 30, 7, 12, 0, 0, 18432, 310, }, /* 914 */ + { 31, 7, 12, 0, 0, 18432, 84, }, /* 915 */ + { 31, 6, 12, 0, 0, 18432, 138, }, /* 916 */ + { 31, 26, 12, 0, 0, 28672, 74, }, /* 917 */ + { 55, 7, 12, 0, 0, 18432, 84, }, /* 918 */ + { 55, 6, 12, 0, 0, 18432, 148, }, /* 919 */ + { 55, 21, 12, 0, 0, 18432, 110, }, /* 920 */ + { 55, 21, 12, 0, 0, 18432, 128, }, /* 921 */ + { 120, 7, 12, 0, 0, 18432, 84, }, /* 922 */ + { 120, 6, 12, 0, 0, 18432, 138, }, /* 923 */ + { 120, 21, 12, 0, 0, 28672, 110, }, /* 924 */ + { 120, 21, 12, 0, 0, 28672, 128, }, /* 925 */ + { 120, 13, 12, 0, 0, 18432, 144, }, /* 926 */ + { 2, 9, 12, 108, 1, 18432, 76, }, /* 927 */ + { 2, 5, 12, 108, -35267, 18432, 78, }, /* 928 */ + { 2, 7, 12, 0, 0, 18432, 84, }, /* 929 */ + { 2, 21, 12, 0, 0, 28672, 74, }, /* 930 */ + { 2, 12, 3, 0, 0, 26624, 98, }, /* 931 */ + { 2, 6, 12, 0, 0, 28672, 94, }, /* 932 */ + { 2, 6, 12, 0, 0, 18432, 90, }, /* 933 */ + { 127, 7, 12, 0, 0, 18432, 84, }, /* 934 */ + { 127, 14, 12, 0, 0, 18432, 84, }, /* 935 */ + { 127, 12, 3, 0, 0, 26624, 98, }, /* 936 */ + { 127, 21, 12, 0, 0, 18432, 74, }, /* 937 */ + { 127, 21, 12, 0, 0, 18432, 128, }, /* 938 */ + { 127, 21, 12, 0, 0, 18432, 110, }, /* 939 */ + { 100, 24, 12, 0, 0, 29084, 56, }, /* 940 */ + { 0, 9, 12, 0, -35332, 18432, 76, }, /* 941 */ + { 100, 24, 12, 0, 0, 18432, 56, }, /* 942 */ + { 0, 9, 12, 0, -42280, 18432, 76, }, /* 943 */ + { 0, 5, 12, 0, 48, 18432, 78, }, /* 944 */ + { 0, 9, 12, 0, -42308, 18432, 76, }, /* 945 */ + { 0, 9, 12, 0, -42319, 18432, 76, }, /* 946 */ + { 0, 9, 12, 0, -42315, 18432, 76, }, /* 947 */ + { 0, 9, 12, 0, -42305, 18432, 76, }, /* 948 */ + { 0, 9, 12, 0, -42258, 18432, 76, }, /* 949 */ + { 0, 9, 12, 0, -42282, 18432, 76, }, /* 950 */ + { 0, 9, 12, 0, -42261, 18432, 76, }, /* 951 */ + { 0, 9, 12, 0, 928, 18432, 76, }, /* 952 */ + { 0, 9, 12, 0, -48, 18432, 76, }, /* 953 */ + { 0, 9, 12, 0, -42307, 18432, 76, }, /* 954 */ + { 0, 9, 12, 0, -35384, 18432, 76, }, /* 955 */ + { 0, 9, 12, 0, -42343, 18432, 76, }, /* 956 */ + { 0, 9, 12, 0, -42561, 18432, 76, }, /* 957 */ + { 46, 7, 12, 0, 0, 18432, 84, }, /* 958 */ + { 46, 12, 3, 0, 0, 26624, 106, }, /* 959 */ + { 46, 12, 3, 0, 0, 26624, 158, }, /* 960 */ + { 46, 10, 5, 0, 0, 18432, 154, }, /* 961 */ + { 46, 26, 12, 0, 0, 28672, 74, }, /* 962 */ + { 100, 15, 12, 0, 0, 18848, 74, }, /* 963 */ + { 100, 15, 12, 0, 0, 18852, 74, }, /* 964 */ + { 100, 26, 12, 0, 0, 18856, 74, }, /* 965 */ + { 100, 23, 12, 0, 0, 14764, 74, }, /* 966 */ + { 100, 26, 12, 0, 0, 14760, 74, }, /* 967 */ + { 47, 7, 12, 0, 0, 18432, 84, }, /* 968 */ + { 47, 21, 12, 0, 0, 28672, 74, }, /* 969 */ + { 47, 21, 12, 0, 0, 28672, 128, }, /* 970 */ + { 121, 10, 5, 0, 0, 18432, 154, }, /* 971 */ + { 121, 7, 12, 0, 0, 18432, 84, }, /* 972 */ + { 121, 12, 3, 0, 0, 26624, 158, }, /* 973 */ + { 121, 12, 3, 0, 0, 26624, 106, }, /* 974 */ + { 121, 21, 12, 0, 0, 18432, 128, }, /* 975 */ + { 121, 13, 12, 0, 0, 18432, 144, }, /* 976 */ + { 8, 12, 3, 0, 0, 27056, 98, }, /* 977 */ + { 8, 7, 12, 0, 0, 18868, 84, }, /* 978 */ + { 49, 13, 12, 0, 0, 18432, 144, }, /* 979 */ + { 49, 7, 12, 0, 0, 18432, 84, }, /* 980 */ + { 49, 12, 3, 0, 0, 26624, 106, }, /* 981 */ + { 49, 12, 3, 0, 0, 26624, 98, }, /* 982 */ + { 100, 21, 12, 0, 0, 18872, 202, }, /* 983 */ + { 49, 21, 12, 0, 0, 18432, 128, }, /* 984 */ + { 122, 7, 12, 0, 0, 18432, 84, }, /* 985 */ + { 122, 12, 3, 0, 0, 26624, 106, }, /* 986 */ + { 122, 10, 5, 0, 0, 18432, 154, }, /* 987 */ + { 122, 10, 3, 0, 0, 18432, 188, }, /* 988 */ + { 122, 21, 12, 0, 0, 18432, 74, }, /* 989 */ + { 56, 12, 3, 0, 0, 26624, 106, }, /* 990 */ + { 56, 10, 5, 0, 0, 18432, 154, }, /* 991 */ + { 56, 7, 12, 0, 0, 18432, 84, }, /* 992 */ + { 56, 7, 12, 0, 0, 18432, 156, }, /* 993 */ + { 56, 12, 3, 0, 0, 26624, 98, }, /* 994 */ + { 56, 10, 3, 0, 0, 18432, 188, }, /* 995 */ + { 56, 21, 12, 0, 0, 18432, 74, }, /* 996 */ + { 56, 21, 12, 0, 0, 18432, 110, }, /* 997 */ + { 56, 21, 12, 0, 0, 18432, 128, }, /* 998 */ + { 100, 6, 12, 0, 0, 18876, 138, }, /* 999 */ + { 56, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ + { 20, 6, 12, 0, 0, 18432, 138, }, /* 1001 */ + { 123, 7, 12, 0, 0, 18432, 84, }, /* 1002 */ + { 123, 12, 3, 0, 0, 26624, 106, }, /* 1003 */ + { 123, 10, 5, 0, 0, 18432, 154, }, /* 1004 */ + { 123, 13, 12, 0, 0, 18432, 144, }, /* 1005 */ + { 123, 21, 12, 0, 0, 18432, 74, }, /* 1006 */ + { 123, 21, 12, 0, 0, 18432, 128, }, /* 1007 */ + { 20, 7, 12, 0, 0, 18432, 84, }, /* 1008 */ + { 125, 7, 12, 0, 0, 18432, 84, }, /* 1009 */ + { 125, 12, 3, 0, 0, 26624, 106, }, /* 1010 */ + { 125, 7, 12, 0, 0, 18432, 170, }, /* 1011 */ + { 125, 12, 3, 0, 0, 26624, 98, }, /* 1012 */ + { 125, 7, 12, 0, 0, 18432, 312, }, /* 1013 */ + { 125, 6, 12, 0, 0, 18432, 138, }, /* 1014 */ + { 125, 21, 12, 0, 0, 18432, 74, }, /* 1015 */ + { 125, 21, 12, 0, 0, 18432, 110, }, /* 1016 */ + { 128, 7, 12, 0, 0, 18432, 156, }, /* 1017 */ + { 128, 10, 5, 0, 0, 18432, 154, }, /* 1018 */ + { 128, 12, 3, 0, 0, 26624, 106, }, /* 1019 */ + { 128, 21, 12, 0, 0, 18432, 128, }, /* 1020 */ + { 128, 7, 12, 0, 0, 18432, 84, }, /* 1021 */ + { 128, 6, 12, 0, 0, 18432, 138, }, /* 1022 */ + { 128, 12, 3, 0, 0, 26624, 158, }, /* 1023 */ + { 0, 5, 12, 0, -928, 18432, 78, }, /* 1024 */ + { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1025 */ + { 128, 10, 5, 0, 0, 18432, 174, }, /* 1026 */ + { 128, 13, 12, 0, 0, 18432, 144, }, /* 1027 */ + { 22, 7, 9, 0, 0, 18432, 84, }, /* 1028 */ + { 22, 7, 10, 0, 0, 18432, 84, }, /* 1029 */ + { 99, 4, 12, 0, 0, 18432, 0, }, /* 1030 */ + { 99, 3, 12, 0, 0, 18432, 0, }, /* 1031 */ + { 30, 7, 12, 0, 0, 18432, 302, }, /* 1032 */ + { 0, 5, 12, 0, 1, 18432, 70, }, /* 1033 */ + { 0, 5, 12, 0, -1, 18432, 70, }, /* 1034 */ + { 4, 25, 12, 0, 0, 12288, 122, }, /* 1035 */ + { 5, 7, 12, 0, 0, 0, 314, }, /* 1036 */ + { 100, 18, 12, 0, 0, 29120, 54, }, /* 1037 */ + { 100, 22, 12, 0, 0, 29120, 54, }, /* 1038 */ + { 99, 2, 12, 0, 0, 6144, 316, }, /* 1039 */ + { 5, 7, 12, 0, 0, 452, 84, }, /* 1040 */ + { 5, 26, 12, 0, 0, 29124, 74, }, /* 1041 */ + { 107, 12, 3, 0, 0, 26624, 194, }, /* 1042 */ + { 107, 12, 3, 0, 0, 26624, 318, }, /* 1043 */ + { 100, 21, 12, 0, 0, 28672, 74, }, /* 1044 */ + { 100, 21, 12, 0, 0, 28672, 128, }, /* 1045 */ + { 100, 21, 12, 0, 0, 28672, 126, }, /* 1046 */ + { 100, 22, 12, 0, 0, 28672, 74, }, /* 1047 */ + { 100, 18, 12, 0, 0, 28672, 74, }, /* 1048 */ + { 100, 17, 12, 0, 0, 28672, 130, }, /* 1049 */ + { 100, 22, 12, 0, 0, 28672, 320, }, /* 1050 */ + { 100, 18, 12, 0, 0, 28672, 320, }, /* 1051 */ + { 100, 21, 12, 0, 0, 8192, 110, }, /* 1052 */ + { 100, 21, 12, 0, 0, 8192, 322, }, /* 1053 */ + { 100, 21, 12, 0, 0, 8192, 324, }, /* 1054 */ + { 100, 22, 12, 0, 0, 28672, 172, }, /* 1055 */ + { 100, 18, 12, 0, 0, 28672, 172, }, /* 1056 */ + { 100, 21, 12, 0, 0, 14336, 74, }, /* 1057 */ + { 100, 21, 12, 0, 0, 28672, 122, }, /* 1058 */ + { 100, 25, 12, 0, 0, 12288, 122, }, /* 1059 */ + { 100, 17, 12, 0, 0, 12288, 326, }, /* 1060 */ + { 100, 25, 12, 0, 0, 28672, 328, }, /* 1061 */ + { 100, 21, 12, 0, 0, 28672, 320, }, /* 1062 */ + { 100, 21, 12, 0, 0, 28672, 330, }, /* 1063 */ + { 100, 17, 12, 0, 0, 12288, 130, }, /* 1064 */ + { 100, 21, 12, 0, 0, 8192, 74, }, /* 1065 */ + { 100, 13, 12, 0, 0, 10240, 332, }, /* 1066 */ + { 0, 9, 12, 0, 32, 18432, 334, }, /* 1067 */ + { 100, 24, 12, 0, 0, 28672, 336, }, /* 1068 */ + { 0, 5, 12, 0, -32, 18432, 338, }, /* 1069 */ + { 100, 21, 12, 0, 0, 29068, 128, }, /* 1070 */ + { 100, 22, 12, 0, 0, 29068, 340, }, /* 1071 */ + { 100, 18, 12, 0, 0, 29068, 340, }, /* 1072 */ + { 100, 21, 12, 0, 0, 29068, 110, }, /* 1073 */ + { 100, 6, 3, 0, 0, 18836, 342, }, /* 1074 */ + { 100, 1, 2, 0, 0, 28672, 344, }, /* 1075 */ + { 39, 7, 12, 0, 0, 18432, 84, }, /* 1076 */ + { 100, 21, 12, 0, 0, 18888, 74, }, /* 1077 */ + { 100, 21, 12, 0, 0, 29128, 74, }, /* 1078 */ + { 100, 21, 12, 0, 0, 18892, 74, }, /* 1079 */ + { 100, 15, 12, 0, 0, 18896, 74, }, /* 1080 */ + { 100, 26, 12, 0, 0, 18892, 74, }, /* 1081 */ + { 1, 14, 12, 0, 0, 28672, 84, }, /* 1082 */ + { 1, 15, 12, 0, 0, 28672, 74, }, /* 1083 */ + { 1, 26, 12, 0, 0, 28672, 74, }, /* 1084 */ + { 1, 26, 12, 0, 0, 18432, 74, }, /* 1085 */ + { 50, 7, 12, 0, 0, 18432, 84, }, /* 1086 */ + { 51, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ + { 107, 12, 3, 0, 0, 27092, 98, }, /* 1088 */ + { 100, 15, 12, 0, 0, 10708, 74, }, /* 1089 */ + { 105, 7, 12, 0, 0, 18432, 84, }, /* 1090 */ + { 105, 15, 12, 0, 0, 18432, 74, }, /* 1091 */ + { 32, 7, 12, 0, 0, 18432, 84, }, /* 1092 */ + { 32, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ + { 73, 7, 12, 0, 0, 18432, 84, }, /* 1094 */ + { 73, 12, 3, 0, 0, 26624, 106, }, /* 1095 */ + { 108, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ + { 108, 21, 12, 0, 0, 18432, 110, }, /* 1097 */ + { 112, 7, 12, 0, 0, 18432, 84, }, /* 1098 */ + { 112, 21, 12, 0, 0, 18432, 110, }, /* 1099 */ + { 112, 14, 12, 0, 0, 18432, 84, }, /* 1100 */ + { 106, 9, 12, 0, 40, 18432, 76, }, /* 1101 */ + { 106, 5, 12, 0, -40, 18432, 78, }, /* 1102 */ + { 40, 7, 12, 0, 0, 18432, 84, }, /* 1103 */ + { 109, 7, 12, 0, 0, 18432, 84, }, /* 1104 */ + { 109, 13, 12, 0, 0, 18432, 144, }, /* 1105 */ + { 81, 9, 12, 0, 40, 18432, 76, }, /* 1106 */ + { 81, 5, 12, 0, -40, 18432, 78, }, /* 1107 */ + { 66, 7, 12, 0, 0, 18432, 84, }, /* 1108 */ + { 64, 7, 12, 0, 0, 18432, 84, }, /* 1109 */ + { 64, 21, 12, 0, 0, 18432, 74, }, /* 1110 */ + { 167, 9, 12, 0, 39, 18432, 76, }, /* 1111 */ + { 167, 5, 12, 0, -39, 18432, 78, }, /* 1112 */ + { 97, 7, 12, 0, 0, 18432, 84, }, /* 1113 */ + { 69, 7, 12, 0, 0, 18432, 84, }, /* 1114 */ + { 0, 6, 12, 0, 0, 18432, 96, }, /* 1115 */ + { 41, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ + { 129, 7, 12, 0, 0, 34816, 84, }, /* 1117 */ + { 129, 21, 12, 0, 0, 34816, 110, }, /* 1118 */ + { 129, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ + { 144, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ + { 144, 26, 12, 0, 0, 34816, 74, }, /* 1121 */ + { 144, 15, 12, 0, 0, 34816, 74, }, /* 1122 */ + { 143, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ + { 143, 15, 12, 0, 0, 34816, 74, }, /* 1124 */ + { 150, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ + { 150, 15, 12, 0, 0, 34816, 74, }, /* 1126 */ + { 116, 7, 12, 0, 0, 34816, 84, }, /* 1127 */ + { 116, 15, 12, 0, 0, 34816, 74, }, /* 1128 */ + { 116, 21, 12, 0, 0, 28672, 110, }, /* 1129 */ + { 52, 7, 12, 0, 0, 34816, 84, }, /* 1130 */ + { 52, 21, 12, 0, 0, 34816, 74, }, /* 1131 */ + { 171, 7, 12, 0, 0, 34816, 84, }, /* 1132 */ + { 61, 7, 12, 0, 0, 34816, 84, }, /* 1133 */ + { 135, 7, 12, 0, 0, 34816, 84, }, /* 1134 */ + { 135, 15, 12, 0, 0, 34816, 74, }, /* 1135 */ + { 113, 7, 12, 0, 0, 34816, 156, }, /* 1136 */ + { 113, 12, 3, 0, 0, 26624, 106, }, /* 1137 */ + { 113, 12, 3, 0, 0, 26624, 98, }, /* 1138 */ + { 113, 12, 3, 0, 0, 26624, 158, }, /* 1139 */ + { 113, 15, 12, 0, 0, 34816, 74, }, /* 1140 */ + { 113, 21, 12, 0, 0, 34816, 74, }, /* 1141 */ + { 113, 21, 12, 0, 0, 34816, 128, }, /* 1142 */ + { 130, 7, 12, 0, 0, 34816, 84, }, /* 1143 */ + { 130, 15, 12, 0, 0, 34816, 74, }, /* 1144 */ + { 130, 21, 12, 0, 0, 34816, 74, }, /* 1145 */ + { 142, 7, 12, 0, 0, 34816, 84, }, /* 1146 */ + { 142, 15, 12, 0, 0, 34816, 74, }, /* 1147 */ + { 71, 7, 12, 0, 0, 34816, 84, }, /* 1148 */ + { 71, 26, 12, 0, 0, 34816, 74, }, /* 1149 */ + { 71, 12, 3, 0, 0, 26624, 98, }, /* 1150 */ + { 71, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ + { 71, 21, 12, 0, 0, 34816, 110, }, /* 1152 */ + { 71, 21, 12, 0, 0, 35288, 110, }, /* 1153 */ + { 71, 21, 12, 0, 0, 34816, 74, }, /* 1154 */ + { 53, 7, 12, 0, 0, 34816, 84, }, /* 1155 */ + { 53, 21, 12, 0, 0, 28672, 74, }, /* 1156 */ + { 53, 21, 12, 0, 0, 28672, 110, }, /* 1157 */ + { 131, 7, 12, 0, 0, 34816, 84, }, /* 1158 */ + { 131, 15, 12, 0, 0, 34816, 74, }, /* 1159 */ + { 132, 7, 12, 0, 0, 34816, 84, }, /* 1160 */ + { 132, 15, 12, 0, 0, 34816, 74, }, /* 1161 */ + { 74, 7, 12, 0, 0, 34816, 84, }, /* 1162 */ + { 74, 21, 12, 0, 0, 34816, 110, }, /* 1163 */ + { 74, 15, 12, 0, 0, 34816, 74, }, /* 1164 */ + { 57, 7, 12, 0, 0, 34816, 84, }, /* 1165 */ + { 78, 9, 12, 0, 64, 34816, 76, }, /* 1166 */ + { 78, 5, 12, 0, -64, 34816, 78, }, /* 1167 */ + { 78, 15, 12, 0, 0, 34816, 74, }, /* 1168 */ + { 86, 7, 12, 0, 0, 0, 84, }, /* 1169 */ + { 86, 7, 12, 0, 0, 0, 312, }, /* 1170 */ + { 86, 12, 3, 0, 0, 26624, 132, }, /* 1171 */ + { 86, 13, 12, 0, 0, 2048, 144, }, /* 1172 */ + { 93, 13, 12, 0, 0, 2048, 144, }, /* 1173 */ + { 93, 7, 12, 0, 0, 34816, 84, }, /* 1174 */ + { 93, 6, 12, 0, 0, 34816, 96, }, /* 1175 */ + { 93, 9, 12, 0, 32, 34816, 76, }, /* 1176 */ + { 93, 12, 3, 0, 0, 26624, 132, }, /* 1177 */ + { 93, 12, 3, 0, 0, 26624, 164, }, /* 1178 */ + { 93, 12, 3, 0, 0, 26624, 98, }, /* 1179 */ + { 93, 17, 12, 0, 0, 28672, 130, }, /* 1180 */ + { 93, 6, 12, 0, 0, 34816, 138, }, /* 1181 */ + { 93, 5, 12, 0, -32, 34816, 78, }, /* 1182 */ + { 93, 25, 12, 0, 0, 34816, 122, }, /* 1183 */ + { 5, 15, 12, 0, 0, 2048, 74, }, /* 1184 */ + { 89, 7, 12, 0, 0, 34816, 84, }, /* 1185 */ + { 89, 12, 3, 0, 0, 26624, 106, }, /* 1186 */ + { 89, 17, 12, 0, 0, 34816, 130, }, /* 1187 */ + { 5, 6, 12, 0, 0, 0, 148, }, /* 1188 */ + { 5, 21, 12, 0, 0, 28672, 74, }, /* 1189 */ + { 159, 7, 12, 0, 0, 34816, 84, }, /* 1190 */ + { 159, 15, 12, 0, 0, 34816, 74, }, /* 1191 */ + { 87, 7, 12, 0, 0, 0, 84, }, /* 1192 */ + { 87, 12, 3, 0, 0, 26624, 98, }, /* 1193 */ + { 87, 15, 12, 0, 0, 0, 74, }, /* 1194 */ + { 87, 21, 12, 0, 0, 0, 128, }, /* 1195 */ + { 91, 7, 12, 0, 0, 34816, 84, }, /* 1196 */ + { 91, 12, 3, 0, 0, 26624, 98, }, /* 1197 */ + { 91, 21, 12, 0, 0, 34816, 128, }, /* 1198 */ + { 163, 7, 12, 0, 0, 34816, 84, }, /* 1199 */ + { 163, 15, 12, 0, 0, 34816, 74, }, /* 1200 */ + { 160, 7, 12, 0, 0, 34816, 84, }, /* 1201 */ + { 134, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ + { 134, 12, 3, 0, 0, 26624, 106, }, /* 1203 */ + { 134, 7, 12, 0, 0, 18432, 84, }, /* 1204 */ + { 134, 12, 3, 0, 0, 26624, 158, }, /* 1205 */ + { 134, 21, 12, 0, 0, 18432, 128, }, /* 1206 */ + { 134, 21, 12, 0, 0, 18432, 110, }, /* 1207 */ + { 134, 15, 12, 0, 0, 28672, 74, }, /* 1208 */ + { 134, 13, 12, 0, 0, 18432, 144, }, /* 1209 */ + { 134, 12, 3, 0, 0, 26624, 288, }, /* 1210 */ + { 58, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ + { 58, 10, 5, 0, 0, 18432, 154, }, /* 1212 */ + { 58, 7, 12, 0, 0, 18432, 84, }, /* 1213 */ + { 58, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ + { 58, 12, 3, 0, 0, 26624, 98, }, /* 1215 */ + { 58, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ + { 58, 1, 4, 0, 0, 18432, 134, }, /* 1217 */ + { 58, 21, 12, 0, 0, 18432, 128, }, /* 1218 */ + { 137, 7, 12, 0, 0, 18432, 84, }, /* 1219 */ + { 137, 13, 12, 0, 0, 18432, 144, }, /* 1220 */ + { 60, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ + { 60, 7, 12, 0, 0, 18432, 156, }, /* 1222 */ + { 60, 10, 5, 0, 0, 18432, 154, }, /* 1223 */ + { 60, 12, 3, 0, 0, 26624, 158, }, /* 1224 */ + { 60, 13, 12, 0, 0, 18432, 144, }, /* 1225 */ + { 60, 21, 12, 0, 0, 18432, 74, }, /* 1226 */ + { 60, 21, 12, 0, 0, 18432, 128, }, /* 1227 */ + { 70, 7, 12, 0, 0, 18432, 84, }, /* 1228 */ + { 70, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ + { 70, 21, 12, 0, 0, 18432, 74, }, /* 1230 */ + { 62, 12, 3, 0, 0, 26624, 106, }, /* 1231 */ + { 62, 10, 5, 0, 0, 18432, 154, }, /* 1232 */ + { 62, 7, 12, 0, 0, 18432, 84, }, /* 1233 */ + { 62, 10, 3, 0, 0, 18432, 188, }, /* 1234 */ + { 62, 7, 4, 0, 0, 18432, 84, }, /* 1235 */ + { 62, 21, 12, 0, 0, 18432, 128, }, /* 1236 */ + { 62, 21, 12, 0, 0, 18432, 74, }, /* 1237 */ + { 62, 12, 3, 0, 0, 26624, 104, }, /* 1238 */ + { 62, 12, 3, 0, 0, 26624, 98, }, /* 1239 */ + { 62, 13, 12, 0, 0, 18432, 144, }, /* 1240 */ + { 17, 15, 12, 0, 0, 18432, 74, }, /* 1241 */ + { 68, 7, 12, 0, 0, 18432, 84, }, /* 1242 */ + { 68, 10, 5, 0, 0, 18432, 154, }, /* 1243 */ + { 68, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ + { 68, 10, 3, 0, 0, 18432, 188, }, /* 1245 */ + { 68, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ + { 68, 12, 3, 0, 0, 26624, 162, }, /* 1247 */ + { 68, 21, 12, 0, 0, 18432, 128, }, /* 1248 */ + { 68, 21, 12, 0, 0, 18432, 110, }, /* 1249 */ + { 68, 21, 12, 0, 0, 18432, 74, }, /* 1250 */ + { 77, 7, 12, 0, 0, 18432, 84, }, /* 1251 */ + { 77, 21, 12, 0, 0, 18432, 128, }, /* 1252 */ + { 75, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ + { 75, 12, 3, 0, 0, 26624, 106, }, /* 1254 */ + { 75, 10, 5, 0, 0, 18432, 154, }, /* 1255 */ + { 75, 12, 3, 0, 0, 26624, 98, }, /* 1256 */ + { 75, 12, 3, 0, 0, 26624, 158, }, /* 1257 */ + { 75, 13, 12, 0, 0, 18432, 144, }, /* 1258 */ + { 67, 12, 3, 0, 0, 26624, 106, }, /* 1259 */ + { 67, 12, 3, 0, 0, 26836, 106, }, /* 1260 */ + { 67, 10, 5, 0, 0, 18432, 154, }, /* 1261 */ + { 67, 10, 5, 0, 0, 18644, 154, }, /* 1262 */ + { 67, 7, 12, 0, 0, 18432, 84, }, /* 1263 */ + { 107, 12, 3, 0, 0, 26836, 98, }, /* 1264 */ + { 67, 12, 3, 0, 0, 26836, 98, }, /* 1265 */ + { 67, 10, 3, 0, 0, 18432, 160, }, /* 1266 */ + { 67, 10, 3, 0, 0, 18432, 188, }, /* 1267 */ + { 67, 7, 12, 0, 0, 18432, 346, }, /* 1268 */ + { 67, 12, 3, 0, 0, 26624, 98, }, /* 1269 */ + { 98, 7, 12, 0, 0, 18432, 156, }, /* 1270 */ + { 98, 7, 12, 0, 0, 18432, 84, }, /* 1271 */ + { 98, 10, 3, 0, 0, 18432, 160, }, /* 1272 */ + { 98, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ + { 98, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ + { 98, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ + { 98, 10, 3, 0, 0, 18432, 188, }, /* 1276 */ + { 98, 7, 4, 0, 0, 18432, 84, }, /* 1277 */ + { 98, 12, 3, 0, 0, 26624, 164, }, /* 1278 */ + { 98, 7, 12, 0, 0, 18432, 348, }, /* 1279 */ + { 98, 21, 12, 0, 0, 18432, 128, }, /* 1280 */ + { 98, 21, 12, 0, 0, 18432, 74, }, /* 1281 */ + { 98, 12, 3, 0, 0, 26624, 98, }, /* 1282 */ + { 80, 7, 12, 0, 0, 18432, 84, }, /* 1283 */ + { 80, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ + { 80, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ + { 80, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ + { 80, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ + { 80, 21, 12, 0, 0, 18432, 128, }, /* 1288 */ + { 80, 21, 12, 0, 0, 18432, 110, }, /* 1289 */ + { 80, 21, 12, 0, 0, 18432, 74, }, /* 1290 */ + { 80, 13, 12, 0, 0, 18432, 144, }, /* 1291 */ + { 80, 12, 3, 0, 0, 26624, 104, }, /* 1292 */ + { 76, 7, 12, 0, 0, 18432, 84, }, /* 1293 */ + { 76, 10, 3, 0, 0, 18432, 160, }, /* 1294 */ + { 76, 10, 5, 0, 0, 18432, 154, }, /* 1295 */ + { 76, 12, 3, 0, 0, 26624, 106, }, /* 1296 */ + { 76, 12, 3, 0, 0, 26624, 158, }, /* 1297 */ + { 76, 12, 3, 0, 0, 26624, 98, }, /* 1298 */ + { 76, 21, 12, 0, 0, 18432, 74, }, /* 1299 */ + { 76, 13, 12, 0, 0, 18432, 144, }, /* 1300 */ + { 146, 7, 12, 0, 0, 18432, 84, }, /* 1301 */ + { 146, 10, 3, 0, 0, 18432, 160, }, /* 1302 */ + { 146, 10, 5, 0, 0, 18432, 154, }, /* 1303 */ + { 146, 12, 3, 0, 0, 26624, 106, }, /* 1304 */ + { 146, 12, 3, 0, 0, 26624, 158, }, /* 1305 */ + { 146, 12, 3, 0, 0, 26624, 98, }, /* 1306 */ + { 146, 21, 12, 0, 0, 18432, 74, }, /* 1307 */ + { 146, 21, 12, 0, 0, 18432, 128, }, /* 1308 */ + { 146, 21, 12, 0, 0, 18432, 110, }, /* 1309 */ + { 146, 21, 12, 0, 0, 18432, 192, }, /* 1310 */ + { 72, 7, 12, 0, 0, 18432, 84, }, /* 1311 */ + { 72, 10, 5, 0, 0, 18432, 154, }, /* 1312 */ + { 72, 12, 3, 0, 0, 26624, 106, }, /* 1313 */ + { 72, 12, 3, 0, 0, 26624, 158, }, /* 1314 */ + { 72, 21, 12, 0, 0, 18432, 128, }, /* 1315 */ + { 72, 21, 12, 0, 0, 18432, 74, }, /* 1316 */ + { 72, 13, 12, 0, 0, 18432, 144, }, /* 1317 */ + { 63, 7, 12, 0, 0, 18432, 84, }, /* 1318 */ + { 63, 12, 3, 0, 0, 26624, 106, }, /* 1319 */ + { 63, 10, 5, 0, 0, 18432, 154, }, /* 1320 */ + { 63, 10, 3, 0, 0, 18432, 188, }, /* 1321 */ + { 63, 12, 3, 0, 0, 26624, 98, }, /* 1322 */ + { 63, 21, 12, 0, 0, 18432, 74, }, /* 1323 */ + { 63, 13, 12, 0, 0, 18432, 144, }, /* 1324 */ + { 148, 7, 12, 0, 0, 18432, 84, }, /* 1325 */ + { 148, 12, 3, 0, 0, 26624, 106, }, /* 1326 */ + { 148, 10, 5, 0, 0, 18432, 154, }, /* 1327 */ + { 148, 10, 12, 0, 0, 18432, 154, }, /* 1328 */ + { 148, 12, 3, 0, 0, 26624, 158, }, /* 1329 */ + { 148, 13, 12, 0, 0, 18432, 144, }, /* 1330 */ + { 148, 15, 12, 0, 0, 18432, 74, }, /* 1331 */ + { 148, 21, 12, 0, 0, 18432, 128, }, /* 1332 */ + { 148, 26, 12, 0, 0, 18432, 74, }, /* 1333 */ + { 84, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ + { 84, 10, 5, 0, 0, 18432, 154, }, /* 1335 */ + { 84, 12, 3, 0, 0, 26624, 106, }, /* 1336 */ + { 84, 12, 3, 0, 0, 26624, 158, }, /* 1337 */ + { 84, 12, 3, 0, 0, 26624, 98, }, /* 1338 */ + { 84, 21, 12, 0, 0, 18432, 74, }, /* 1339 */ + { 147, 9, 12, 0, 32, 18432, 76, }, /* 1340 */ + { 147, 5, 12, 0, -32, 18432, 78, }, /* 1341 */ + { 147, 13, 12, 0, 0, 18432, 144, }, /* 1342 */ + { 147, 15, 12, 0, 0, 18432, 74, }, /* 1343 */ + { 147, 7, 12, 0, 0, 18432, 84, }, /* 1344 */ + { 164, 7, 12, 0, 0, 18432, 156, }, /* 1345 */ + { 164, 10, 3, 0, 0, 18432, 160, }, /* 1346 */ + { 164, 10, 5, 0, 0, 18432, 154, }, /* 1347 */ + { 164, 12, 3, 0, 0, 26624, 106, }, /* 1348 */ + { 164, 10, 3, 0, 0, 18432, 188, }, /* 1349 */ + { 164, 12, 3, 0, 0, 26624, 158, }, /* 1350 */ + { 164, 7, 4, 0, 0, 18432, 84, }, /* 1351 */ + { 164, 12, 3, 0, 0, 26624, 98, }, /* 1352 */ + { 164, 21, 12, 0, 0, 18432, 128, }, /* 1353 */ + { 164, 21, 12, 0, 0, 18432, 74, }, /* 1354 */ + { 164, 13, 12, 0, 0, 18432, 144, }, /* 1355 */ + { 88, 7, 12, 0, 0, 18432, 84, }, /* 1356 */ + { 88, 10, 5, 0, 0, 18432, 154, }, /* 1357 */ + { 88, 12, 3, 0, 0, 26624, 106, }, /* 1358 */ + { 88, 12, 3, 0, 0, 26624, 158, }, /* 1359 */ + { 88, 21, 12, 0, 0, 18432, 74, }, /* 1360 */ + { 156, 7, 12, 0, 0, 18432, 156, }, /* 1361 */ + { 156, 12, 3, 0, 0, 26624, 106, }, /* 1362 */ + { 156, 12, 3, 0, 0, 18432, 106, }, /* 1363 */ + { 156, 12, 3, 0, 0, 26624, 104, }, /* 1364 */ + { 156, 12, 3, 0, 0, 26624, 158, }, /* 1365 */ + { 156, 10, 5, 0, 0, 18432, 154, }, /* 1366 */ + { 156, 7, 12, 0, 0, 18432, 84, }, /* 1367 */ + { 156, 21, 12, 0, 0, 18432, 74, }, /* 1368 */ + { 156, 21, 12, 0, 0, 18432, 128, }, /* 1369 */ + { 155, 7, 12, 0, 0, 18432, 156, }, /* 1370 */ + { 155, 12, 3, 0, 0, 26624, 106, }, /* 1371 */ + { 155, 10, 5, 0, 0, 18432, 154, }, /* 1372 */ + { 155, 7, 4, 0, 0, 18432, 84, }, /* 1373 */ + { 155, 12, 3, 0, 0, 26624, 350, }, /* 1374 */ + { 155, 12, 3, 0, 0, 26624, 158, }, /* 1375 */ + { 155, 21, 12, 0, 0, 18432, 74, }, /* 1376 */ + { 155, 21, 12, 0, 0, 18432, 128, }, /* 1377 */ + { 155, 7, 12, 0, 0, 18432, 84, }, /* 1378 */ + { 155, 21, 12, 0, 0, 18432, 110, }, /* 1379 */ + { 145, 7, 12, 0, 0, 18432, 84, }, /* 1380 */ + { 96, 7, 12, 0, 0, 18432, 84, }, /* 1381 */ + { 96, 21, 12, 0, 0, 18432, 74, }, /* 1382 */ + { 96, 13, 12, 0, 0, 18432, 144, }, /* 1383 */ + { 152, 7, 12, 0, 0, 18432, 84, }, /* 1384 */ { 152, 10, 5, 0, 0, 18432, 154, }, /* 1385 */ - { 82, 7, 12, 0, 0, 18432, 84, }, /* 1386 */ - { 82, 12, 3, 0, 0, 26624, 106, }, /* 1387 */ - { 82, 12, 3, 0, 0, 26624, 98, }, /* 1388 */ - { 82, 12, 3, 0, 0, 26624, 158, }, /* 1389 */ - { 82, 7, 4, 0, 0, 18432, 84, }, /* 1390 */ - { 82, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ - { 84, 7, 12, 0, 0, 18432, 84, }, /* 1392 */ - { 84, 10, 5, 0, 0, 18432, 154, }, /* 1393 */ - { 84, 12, 3, 0, 0, 26624, 106, }, /* 1394 */ - { 84, 12, 3, 0, 0, 26624, 158, }, /* 1395 */ - { 84, 13, 12, 0, 0, 18432, 144, }, /* 1396 */ - { 157, 7, 12, 0, 0, 18432, 84, }, /* 1397 */ - { 157, 12, 3, 0, 0, 26624, 106, }, /* 1398 */ - { 157, 10, 5, 0, 0, 18432, 154, }, /* 1399 */ - { 157, 21, 12, 0, 0, 18432, 128, }, /* 1400 */ - { 168, 12, 3, 0, 0, 26624, 106, }, /* 1401 */ - { 168, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ - { 168, 10, 5, 0, 0, 18432, 154, }, /* 1403 */ - { 168, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ - { 168, 10, 3, 0, 0, 18432, 188, }, /* 1405 */ - { 168, 12, 3, 0, 0, 26624, 158, }, /* 1406 */ - { 168, 21, 12, 0, 0, 18432, 128, }, /* 1407 */ - { 168, 21, 12, 0, 0, 18432, 74, }, /* 1408 */ - { 168, 13, 12, 0, 0, 18432, 144, }, /* 1409 */ - { 168, 12, 3, 0, 0, 26624, 98, }, /* 1410 */ - { 13, 15, 12, 0, 0, 18432, 74, }, /* 1411 */ - { 13, 21, 12, 0, 0, 18432, 74, }, /* 1412 */ - { 114, 7, 12, 0, 0, 18432, 84, }, /* 1413 */ - { 114, 14, 12, 0, 0, 18432, 84, }, /* 1414 */ - { 114, 21, 12, 0, 0, 18432, 110, }, /* 1415 */ - { 89, 7, 12, 0, 0, 18432, 84, }, /* 1416 */ - { 89, 21, 12, 0, 0, 18432, 74, }, /* 1417 */ - { 125, 7, 12, 0, 0, 18432, 84, }, /* 1418 */ - { 125, 1, 2, 0, 0, 18432, 346, }, /* 1419 */ - { 125, 12, 3, 0, 0, 26624, 104, }, /* 1420 */ - { 125, 12, 3, 0, 0, 26624, 98, }, /* 1421 */ - { 148, 7, 12, 0, 0, 18432, 84, }, /* 1422 */ - { 93, 7, 12, 0, 0, 18432, 84, }, /* 1423 */ - { 93, 12, 3, 0, 0, 26624, 106, }, /* 1424 */ - { 93, 10, 5, 0, 0, 18432, 154, }, /* 1425 */ - { 93, 12, 3, 0, 0, 26624, 158, }, /* 1426 */ - { 93, 13, 12, 0, 0, 18432, 144, }, /* 1427 */ - { 140, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ - { 140, 13, 12, 0, 0, 18432, 144, }, /* 1429 */ - { 140, 21, 12, 0, 0, 18432, 128, }, /* 1430 */ - { 166, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ - { 166, 13, 12, 0, 0, 18432, 144, }, /* 1432 */ - { 137, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ - { 137, 12, 3, 0, 0, 26624, 98, }, /* 1434 */ - { 137, 21, 12, 0, 0, 18432, 128, }, /* 1435 */ - { 138, 7, 12, 0, 0, 18432, 84, }, /* 1436 */ - { 138, 12, 3, 0, 0, 26624, 98, }, /* 1437 */ - { 138, 21, 12, 0, 0, 18432, 128, }, /* 1438 */ - { 138, 21, 12, 0, 0, 18432, 110, }, /* 1439 */ - { 138, 21, 12, 0, 0, 18432, 74, }, /* 1440 */ - { 138, 26, 12, 0, 0, 18432, 74, }, /* 1441 */ - { 138, 6, 12, 0, 0, 18432, 148, }, /* 1442 */ - { 138, 6, 12, 0, 0, 18432, 138, }, /* 1443 */ - { 138, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ - { 138, 15, 12, 0, 0, 18432, 74, }, /* 1445 */ - { 170, 6, 12, 0, 0, 18432, 148, }, /* 1446 */ - { 170, 7, 12, 0, 0, 18432, 84, }, /* 1447 */ - { 170, 7, 7, 0, 0, 18432, 84, }, /* 1448 */ - { 170, 6, 12, 0, 0, 18432, 94, }, /* 1449 */ - { 170, 21, 12, 0, 0, 18432, 74, }, /* 1450 */ - { 170, 21, 12, 0, 0, 18432, 128, }, /* 1451 */ - { 170, 13, 12, 0, 0, 18432, 144, }, /* 1452 */ - { 158, 9, 12, 0, 32, 18432, 76, }, /* 1453 */ - { 158, 5, 12, 0, -32, 18432, 78, }, /* 1454 */ - { 158, 15, 12, 0, 0, 18432, 74, }, /* 1455 */ - { 158, 21, 12, 0, 0, 18432, 110, }, /* 1456 */ - { 158, 21, 12, 0, 0, 18432, 128, }, /* 1457 */ - { 158, 21, 12, 0, 0, 18432, 74, }, /* 1458 */ - { 135, 7, 12, 0, 0, 18432, 84, }, /* 1459 */ - { 135, 12, 3, 0, 0, 26624, 106, }, /* 1460 */ - { 135, 10, 5, 0, 0, 18432, 154, }, /* 1461 */ - { 135, 12, 3, 0, 0, 26624, 132, }, /* 1462 */ - { 135, 6, 12, 0, 0, 18432, 94, }, /* 1463 */ - { 81, 6, 12, 0, 0, 18432, 138, }, /* 1464 */ - { 154, 6, 12, 0, 0, 18432, 138, }, /* 1465 */ - { 30, 21, 12, 0, 0, 28672, 74, }, /* 1466 */ - { 165, 12, 3, 0, 0, 26624, 354, }, /* 1467 */ - { 30, 10, 3, 0, 0, 18432, 356, }, /* 1468 */ - { 81, 7, 12, 0, 0, 18432, 304, }, /* 1469 */ - { 165, 7, 12, 0, 0, 18432, 304, }, /* 1470 */ - { 28, 6, 12, 0, 0, 18432, 94, }, /* 1471 */ - { 154, 7, 12, 0, 0, 18432, 304, }, /* 1472 */ - { 65, 7, 12, 0, 0, 18432, 84, }, /* 1473 */ - { 65, 26, 12, 0, 0, 18432, 74, }, /* 1474 */ - { 65, 12, 3, 0, 0, 26624, 104, }, /* 1475 */ - { 65, 12, 3, 0, 0, 26624, 106, }, /* 1476 */ - { 65, 21, 12, 0, 0, 18432, 128, }, /* 1477 */ - { 99, 1, 2, 0, 0, 6472, 66, }, /* 1478 */ - { 99, 13, 12, 0, 0, 10240, 144, }, /* 1479 */ - { 99, 10, 3, 0, 0, 18432, 358, }, /* 1480 */ - { 99, 10, 3, 0, 0, 18432, 306, }, /* 1481 */ - { 1, 12, 3, 0, 0, 26624, 104, }, /* 1482 */ - { 99, 25, 12, 0, 0, 28672, 360, }, /* 1483 */ - { 99, 13, 12, 0, 0, 10240, 226, }, /* 1484 */ - { 150, 26, 12, 0, 0, 18432, 74, }, /* 1485 */ - { 150, 12, 3, 0, 0, 26624, 104, }, /* 1486 */ - { 150, 21, 12, 0, 0, 18432, 110, }, /* 1487 */ - { 150, 21, 12, 0, 0, 18432, 128, }, /* 1488 */ - { 150, 21, 12, 0, 0, 18432, 74, }, /* 1489 */ - { 44, 12, 3, 0, 0, 26624, 106, }, /* 1490 */ - { 2, 6, 12, 0, 0, 18432, 92, }, /* 1491 */ - { 161, 7, 12, 0, 0, 18432, 84, }, /* 1492 */ - { 161, 12, 3, 0, 0, 26624, 98, }, /* 1493 */ - { 161, 6, 12, 0, 0, 18432, 148, }, /* 1494 */ - { 161, 6, 12, 0, 0, 18432, 138, }, /* 1495 */ - { 161, 13, 12, 0, 0, 18432, 144, }, /* 1496 */ - { 161, 26, 12, 0, 0, 18432, 74, }, /* 1497 */ - { 91, 7, 12, 0, 0, 18432, 84, }, /* 1498 */ - { 91, 12, 3, 0, 0, 26624, 98, }, /* 1499 */ - { 162, 7, 12, 0, 0, 18432, 84, }, /* 1500 */ - { 162, 12, 3, 0, 0, 26624, 98, }, /* 1501 */ - { 162, 13, 12, 0, 0, 18432, 144, }, /* 1502 */ - { 162, 23, 12, 0, 0, 14336, 74, }, /* 1503 */ - { 169, 7, 12, 0, 0, 18432, 84, }, /* 1504 */ - { 169, 6, 12, 0, 0, 18432, 148, }, /* 1505 */ - { 169, 12, 3, 0, 0, 26624, 104, }, /* 1506 */ - { 169, 13, 12, 0, 0, 18432, 144, }, /* 1507 */ - { 94, 7, 12, 0, 0, 18432, 84, }, /* 1508 */ - { 94, 12, 3, 0, 0, 26624, 98, }, /* 1509 */ - { 94, 12, 3, 0, 0, 26624, 164, }, /* 1510 */ - { 94, 13, 12, 0, 0, 18432, 144, }, /* 1511 */ - { 94, 21, 12, 0, 0, 18432, 74, }, /* 1512 */ - { 139, 7, 12, 0, 0, 34816, 84, }, /* 1513 */ - { 139, 15, 12, 0, 0, 34816, 74, }, /* 1514 */ - { 139, 12, 3, 0, 0, 26624, 98, }, /* 1515 */ - { 79, 9, 12, 0, 34, 34816, 76, }, /* 1516 */ - { 79, 5, 12, 0, -34, 34816, 78, }, /* 1517 */ - { 79, 12, 3, 0, 0, 26624, 164, }, /* 1518 */ - { 79, 12, 3, 0, 0, 26624, 106, }, /* 1519 */ - { 79, 12, 3, 0, 0, 26624, 98, }, /* 1520 */ - { 79, 6, 12, 0, 0, 34816, 148, }, /* 1521 */ - { 79, 13, 12, 0, 0, 34816, 144, }, /* 1522 */ - { 79, 21, 12, 0, 0, 34816, 74, }, /* 1523 */ - { 99, 15, 12, 0, 0, 0, 74, }, /* 1524 */ - { 99, 26, 12, 0, 0, 0, 74, }, /* 1525 */ - { 99, 23, 12, 0, 0, 0, 74, }, /* 1526 */ - { 5, 7, 12, 0, 0, 0, 254, }, /* 1527 */ - { 99, 26, 14, 0, 0, 28672, 362, }, /* 1528 */ - { 99, 26, 14, 0, 0, 28672, 364, }, /* 1529 */ - { 98, 2, 14, 0, 0, 18432, 366, }, /* 1530 */ - { 99, 26, 12, 0, 0, 18432, 368, }, /* 1531 */ - { 99, 26, 14, 0, 0, 18432, 370, }, /* 1532 */ - { 99, 26, 14, 0, 0, 18432, 364, }, /* 1533 */ - { 99, 26, 11, 0, 0, 18432, 372, }, /* 1534 */ - { 27, 26, 12, 0, 0, 18432, 74, }, /* 1535 */ - { 99, 26, 14, 0, 0, 18432, 250, }, /* 1536 */ - { 99, 26, 14, 0, 0, 18784, 364, }, /* 1537 */ - { 99, 26, 14, 0, 0, 28672, 374, }, /* 1538 */ - { 99, 26, 14, 0, 0, 28672, 376, }, /* 1539 */ - { 99, 24, 3, 0, 0, 28672, 378, }, /* 1540 */ - { 99, 26, 14, 0, 0, 28672, 380, }, /* 1541 */ - { 99, 1, 3, 0, 0, 6144, 382, }, /* 1542 */ + { 152, 12, 3, 0, 0, 26624, 106, }, /* 1386 */ + { 152, 12, 3, 0, 0, 18432, 158, }, /* 1387 */ + { 152, 21, 12, 0, 0, 18432, 128, }, /* 1388 */ + { 152, 21, 12, 0, 0, 18432, 110, }, /* 1389 */ + { 152, 21, 12, 0, 0, 18432, 74, }, /* 1390 */ + { 152, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ + { 152, 15, 12, 0, 0, 18432, 74, }, /* 1392 */ + { 153, 21, 12, 0, 0, 18432, 74, }, /* 1393 */ + { 153, 21, 12, 0, 0, 18432, 110, }, /* 1394 */ + { 153, 7, 12, 0, 0, 18432, 84, }, /* 1395 */ + { 153, 12, 3, 0, 0, 26624, 106, }, /* 1396 */ + { 153, 10, 5, 0, 0, 18432, 154, }, /* 1397 */ + { 83, 7, 12, 0, 0, 18432, 84, }, /* 1398 */ + { 83, 12, 3, 0, 0, 26624, 106, }, /* 1399 */ + { 83, 12, 3, 0, 0, 26624, 98, }, /* 1400 */ + { 83, 12, 3, 0, 0, 26624, 158, }, /* 1401 */ + { 83, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ + { 83, 13, 12, 0, 0, 18432, 144, }, /* 1403 */ + { 85, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ + { 85, 10, 5, 0, 0, 18432, 154, }, /* 1405 */ + { 85, 12, 3, 0, 0, 26624, 106, }, /* 1406 */ + { 85, 12, 3, 0, 0, 26624, 158, }, /* 1407 */ + { 85, 13, 12, 0, 0, 18432, 144, }, /* 1408 */ + { 173, 7, 12, 0, 0, 18432, 84, }, /* 1409 */ + { 173, 6, 12, 0, 0, 18432, 96, }, /* 1410 */ + { 173, 13, 12, 0, 0, 18432, 144, }, /* 1411 */ + { 157, 7, 12, 0, 0, 18432, 84, }, /* 1412 */ + { 157, 12, 3, 0, 0, 26624, 106, }, /* 1413 */ + { 157, 10, 5, 0, 0, 18432, 154, }, /* 1414 */ + { 157, 21, 12, 0, 0, 18432, 128, }, /* 1415 */ + { 168, 12, 3, 0, 0, 26624, 106, }, /* 1416 */ + { 168, 7, 4, 0, 0, 18432, 84, }, /* 1417 */ + { 168, 10, 5, 0, 0, 18432, 154, }, /* 1418 */ + { 168, 7, 12, 0, 0, 18432, 156, }, /* 1419 */ + { 168, 10, 3, 0, 0, 18432, 188, }, /* 1420 */ + { 168, 12, 3, 0, 0, 26624, 158, }, /* 1421 */ + { 168, 21, 12, 0, 0, 18432, 128, }, /* 1422 */ + { 168, 21, 12, 0, 0, 18432, 74, }, /* 1423 */ + { 168, 13, 12, 0, 0, 18432, 144, }, /* 1424 */ + { 168, 12, 3, 0, 0, 26624, 98, }, /* 1425 */ + { 13, 15, 12, 0, 0, 18432, 74, }, /* 1426 */ + { 13, 21, 12, 0, 0, 18432, 74, }, /* 1427 */ + { 115, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ + { 115, 14, 12, 0, 0, 18432, 84, }, /* 1429 */ + { 115, 21, 12, 0, 0, 18432, 110, }, /* 1430 */ + { 90, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ + { 90, 21, 12, 0, 0, 18432, 74, }, /* 1432 */ + { 126, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ + { 126, 1, 2, 0, 0, 18432, 344, }, /* 1434 */ + { 126, 12, 3, 0, 0, 26624, 104, }, /* 1435 */ + { 126, 12, 3, 0, 0, 26624, 98, }, /* 1436 */ + { 149, 7, 12, 0, 0, 18432, 84, }, /* 1437 */ + { 94, 7, 12, 0, 0, 18432, 84, }, /* 1438 */ + { 94, 12, 3, 0, 0, 26624, 106, }, /* 1439 */ + { 94, 10, 5, 0, 0, 18432, 154, }, /* 1440 */ + { 94, 12, 3, 0, 0, 26624, 158, }, /* 1441 */ + { 94, 13, 12, 0, 0, 18432, 144, }, /* 1442 */ + { 141, 7, 12, 0, 0, 18432, 84, }, /* 1443 */ + { 141, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ + { 141, 21, 12, 0, 0, 18432, 128, }, /* 1445 */ + { 166, 7, 12, 0, 0, 18432, 84, }, /* 1446 */ + { 166, 13, 12, 0, 0, 18432, 144, }, /* 1447 */ + { 138, 7, 12, 0, 0, 18432, 84, }, /* 1448 */ + { 138, 12, 3, 0, 0, 26624, 98, }, /* 1449 */ + { 138, 21, 12, 0, 0, 18432, 128, }, /* 1450 */ + { 139, 7, 12, 0, 0, 18432, 84, }, /* 1451 */ + { 139, 12, 3, 0, 0, 26624, 98, }, /* 1452 */ + { 139, 21, 12, 0, 0, 18432, 128, }, /* 1453 */ + { 139, 21, 12, 0, 0, 18432, 110, }, /* 1454 */ + { 139, 21, 12, 0, 0, 18432, 74, }, /* 1455 */ + { 139, 26, 12, 0, 0, 18432, 74, }, /* 1456 */ + { 139, 6, 12, 0, 0, 18432, 148, }, /* 1457 */ + { 139, 6, 12, 0, 0, 18432, 138, }, /* 1458 */ + { 139, 13, 12, 0, 0, 18432, 144, }, /* 1459 */ + { 139, 15, 12, 0, 0, 18432, 74, }, /* 1460 */ + { 170, 6, 12, 0, 0, 18432, 148, }, /* 1461 */ + { 170, 7, 12, 0, 0, 18432, 84, }, /* 1462 */ + { 170, 7, 7, 0, 0, 18432, 84, }, /* 1463 */ + { 170, 6, 12, 0, 0, 18432, 94, }, /* 1464 */ + { 170, 21, 12, 0, 0, 18432, 74, }, /* 1465 */ + { 170, 21, 12, 0, 0, 18432, 128, }, /* 1466 */ + { 170, 13, 12, 0, 0, 18432, 144, }, /* 1467 */ + { 158, 9, 12, 0, 32, 18432, 76, }, /* 1468 */ + { 158, 5, 12, 0, -32, 18432, 78, }, /* 1469 */ + { 158, 15, 12, 0, 0, 18432, 74, }, /* 1470 */ + { 158, 21, 12, 0, 0, 18432, 110, }, /* 1471 */ + { 158, 21, 12, 0, 0, 18432, 128, }, /* 1472 */ + { 158, 21, 12, 0, 0, 18432, 74, }, /* 1473 */ + { 174, 9, 12, 0, 27, 18432, 76, }, /* 1474 */ + { 174, 5, 12, 0, -27, 18432, 78, }, /* 1475 */ + { 136, 7, 12, 0, 0, 18432, 84, }, /* 1476 */ + { 136, 12, 3, 0, 0, 26624, 106, }, /* 1477 */ + { 136, 10, 5, 0, 0, 18432, 154, }, /* 1478 */ + { 136, 12, 3, 0, 0, 26624, 132, }, /* 1479 */ + { 136, 6, 12, 0, 0, 18432, 94, }, /* 1480 */ + { 82, 6, 12, 0, 0, 18432, 138, }, /* 1481 */ + { 154, 6, 12, 0, 0, 18432, 138, }, /* 1482 */ + { 30, 21, 12, 0, 0, 28672, 74, }, /* 1483 */ + { 165, 12, 3, 0, 0, 26624, 352, }, /* 1484 */ + { 30, 10, 3, 0, 0, 18432, 354, }, /* 1485 */ + { 30, 6, 12, 0, 0, 18432, 356, }, /* 1486 */ + { 82, 7, 12, 0, 0, 18432, 302, }, /* 1487 */ + { 165, 7, 12, 0, 0, 18432, 302, }, /* 1488 */ + { 28, 6, 12, 0, 0, 18432, 94, }, /* 1489 */ + { 154, 7, 12, 0, 0, 18432, 302, }, /* 1490 */ + { 65, 7, 12, 0, 0, 18432, 84, }, /* 1491 */ + { 65, 26, 12, 0, 0, 18432, 74, }, /* 1492 */ + { 65, 12, 3, 0, 0, 26624, 104, }, /* 1493 */ + { 65, 12, 3, 0, 0, 26624, 106, }, /* 1494 */ + { 65, 21, 12, 0, 0, 18432, 128, }, /* 1495 */ + { 100, 1, 2, 0, 0, 6504, 66, }, /* 1496 */ + { 100, 13, 12, 0, 0, 10240, 144, }, /* 1497 */ + { 100, 10, 3, 0, 0, 18432, 358, }, /* 1498 */ + { 100, 10, 3, 0, 0, 18432, 304, }, /* 1499 */ + { 1, 12, 3, 0, 0, 26624, 104, }, /* 1500 */ + { 100, 25, 12, 0, 0, 28672, 360, }, /* 1501 */ + { 100, 13, 12, 0, 0, 10240, 226, }, /* 1502 */ + { 151, 26, 12, 0, 0, 18432, 74, }, /* 1503 */ + { 151, 12, 3, 0, 0, 26624, 104, }, /* 1504 */ + { 151, 21, 12, 0, 0, 18432, 110, }, /* 1505 */ + { 151, 21, 12, 0, 0, 18432, 128, }, /* 1506 */ + { 151, 21, 12, 0, 0, 18432, 74, }, /* 1507 */ + { 44, 12, 3, 0, 0, 26624, 106, }, /* 1508 */ + { 2, 6, 12, 0, 0, 18432, 92, }, /* 1509 */ + { 161, 7, 12, 0, 0, 18432, 84, }, /* 1510 */ + { 161, 12, 3, 0, 0, 26624, 98, }, /* 1511 */ + { 161, 6, 12, 0, 0, 18432, 148, }, /* 1512 */ + { 161, 6, 12, 0, 0, 18432, 138, }, /* 1513 */ + { 161, 13, 12, 0, 0, 18432, 144, }, /* 1514 */ + { 161, 26, 12, 0, 0, 18432, 74, }, /* 1515 */ + { 92, 7, 12, 0, 0, 18432, 84, }, /* 1516 */ + { 92, 12, 3, 0, 0, 26624, 98, }, /* 1517 */ + { 162, 7, 12, 0, 0, 18432, 84, }, /* 1518 */ + { 162, 12, 3, 0, 0, 26624, 98, }, /* 1519 */ + { 162, 13, 12, 0, 0, 18432, 144, }, /* 1520 */ + { 162, 23, 12, 0, 0, 14336, 74, }, /* 1521 */ + { 169, 7, 12, 0, 0, 18432, 84, }, /* 1522 */ + { 169, 6, 12, 0, 0, 18432, 148, }, /* 1523 */ + { 169, 12, 3, 0, 0, 26624, 104, }, /* 1524 */ + { 169, 13, 12, 0, 0, 18432, 144, }, /* 1525 */ + { 95, 7, 12, 0, 0, 18432, 84, }, /* 1526 */ + { 95, 12, 3, 0, 0, 26624, 98, }, /* 1527 */ + { 95, 12, 3, 0, 0, 26624, 164, }, /* 1528 */ + { 95, 13, 12, 0, 0, 18432, 144, }, /* 1529 */ + { 95, 21, 12, 0, 0, 18432, 74, }, /* 1530 */ + { 172, 7, 12, 0, 0, 18432, 84, }, /* 1531 */ + { 172, 12, 3, 0, 0, 26624, 106, }, /* 1532 */ + { 172, 6, 12, 0, 0, 18432, 148, }, /* 1533 */ + { 140, 7, 12, 0, 0, 34816, 84, }, /* 1534 */ + { 140, 15, 12, 0, 0, 34816, 74, }, /* 1535 */ + { 140, 12, 3, 0, 0, 26624, 98, }, /* 1536 */ + { 79, 9, 12, 0, 34, 34816, 76, }, /* 1537 */ + { 79, 5, 12, 0, -34, 34816, 78, }, /* 1538 */ + { 79, 12, 3, 0, 0, 26624, 164, }, /* 1539 */ + { 79, 12, 3, 0, 0, 26624, 106, }, /* 1540 */ + { 79, 12, 3, 0, 0, 26624, 98, }, /* 1541 */ + { 79, 6, 12, 0, 0, 34816, 148, }, /* 1542 */ + { 79, 13, 12, 0, 0, 34816, 144, }, /* 1543 */ + { 79, 21, 12, 0, 0, 34816, 74, }, /* 1544 */ + { 100, 15, 12, 0, 0, 0, 74, }, /* 1545 */ + { 100, 26, 12, 0, 0, 0, 74, }, /* 1546 */ + { 100, 23, 12, 0, 0, 0, 74, }, /* 1547 */ + { 5, 7, 12, 0, 0, 0, 256, }, /* 1548 */ + { 100, 26, 14, 0, 0, 28672, 362, }, /* 1549 */ + { 99, 2, 14, 0, 0, 18432, 364, }, /* 1550 */ + { 100, 26, 12, 0, 0, 18432, 366, }, /* 1551 */ + { 100, 26, 14, 0, 0, 18432, 368, }, /* 1552 */ + { 100, 26, 14, 0, 0, 18432, 362, }, /* 1553 */ + { 100, 26, 11, 0, 0, 18432, 370, }, /* 1554 */ + { 27, 26, 12, 0, 0, 18432, 74, }, /* 1555 */ + { 100, 26, 14, 0, 0, 18432, 252, }, /* 1556 */ + { 100, 26, 14, 0, 0, 18816, 362, }, /* 1557 */ + { 100, 26, 14, 0, 0, 28672, 372, }, /* 1558 */ + { 100, 26, 14, 0, 0, 28672, 374, }, /* 1559 */ + { 100, 24, 3, 0, 0, 28672, 376, }, /* 1560 */ + { 100, 26, 14, 0, 0, 28672, 378, }, /* 1561 */ + { 100, 1, 3, 0, 0, 6144, 380, }, /* 1562 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -2144,8 +2172,8 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 213,213,213,213,214,215,216,217,146,146,218,146,219,220,221,222, /* U+16800 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17000 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17800 */ -223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224, /* U+18000 */ -223,223,223,223,223,223,225,225,225,226,227,146,146,146,146,146, /* U+18800 */ +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+18000 */ +223,223,223,223,223,223,224,224,224,225,226,227,146,146,146,146, /* U+18800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */ @@ -2156,10 +2184,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,236,237,236,236,236,238,239,240, /* U+1C800 */ 241,242,243,244,245,246,247,146,248,249,250,251,252,253,254,255, /* U+1D000 */ 256,256,256,256,257,258,146,146,146,146,146,146,146,146,259,146, /* U+1D800 */ -260,261,262,146,146,263,146,146,146,264,146,265,146,146,146,266, /* U+1E000 */ -267,268,269,270,270,270,270,270,271,272,273,270,274,275,270,270, /* U+1E800 */ -276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291, /* U+1F000 */ -292,293,294,295,296,297,236,298,281,281,281,281,281,281,281,299, /* U+1F800 */ +260,261,262,146,146,263,146,146,146,264,146,265,146,266,146,267, /* U+1E000 */ +268,269,270,271,271,271,271,271,272,273,274,271,275,276,271,271, /* U+1E800 */ +277,278,279,280,281,282,283,284,285,286,287,288,289,290,236,291, /* U+1F000 */ +292,293,294,295,296,297,236,298,282,282,282,282,282,282,282,299, /* U+1F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */ @@ -2182,23 +2210,23 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,300,101,101, /* U+2A000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,101,301,101, /* U+2B000 */ -302,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B000 */ +301,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,303,101,101, /* U+2C800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,302,101,101, /* U+2C800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */ -101,101,101,101,101,101,101,304,101,101,101,101,305,146,146,146, /* U+2E800 */ +101,101,101,101,101,101,101,303,101,101,101,101,304,146,146,146, /* U+2E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */ -129,129,129,129,306,146,146,146,146,146,146,146,146,146,146,307, /* U+2F800 */ +129,129,129,129,305,146,146,146,146,146,146,146,146,146,146,306, /* U+2F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */ -101,101,101,101,101,101,308,101,101,101,101,101,101,101,101,101, /* U+31000 */ +101,101,101,101,101,101,307,101,101,101,101,101,101,101,101,101, /* U+31000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+31800 */ -101,101,101,101,101,101,101,309,146,146,146,146,146,146,146,146, /* U+32000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32800 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32800 */ +101,101,101,101,101,101,101,101,308,146,146,146,146,146,146,146, /* U+33000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */ @@ -2223,7 +2251,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+3F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+3F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */ @@ -2255,7 +2283,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+4F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+4F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */ @@ -2287,7 +2315,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+5F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+5F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */ @@ -2319,7 +2347,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+6F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+6F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */ @@ -2351,7 +2379,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+7F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+7F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */ @@ -2383,7 +2411,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+8F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+8F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */ @@ -2415,7 +2443,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+9F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+9F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */ @@ -2447,7 +2475,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+AF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+AF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */ @@ -2479,7 +2507,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+BF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+BF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */ @@ -2511,7 +2539,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+CF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+CF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */ @@ -2543,9 +2571,9 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+DF800 */ -310,311,312,313,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0000 */ -311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+DF800 */ +309,310,311,312,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0000 */ +310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */ @@ -2575,7 +2603,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+EF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+EF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */ @@ -2607,7 +2635,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+FF800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+FF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */ @@ -2639,10 +2667,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+10F800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 80384 bytes, block = 128 */ /* block 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 4, 0, 0, @@ -2696,7 +2724,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 5 */ 140, 70,141,140, 70, 70, 70,142,140,143,144,144,145, 70, 70, 70, - 70, 70,146, 70, 93, 70, 70, 70, 70, 70, 70, 70, 70,147,148, 70, + 70, 70,146, 70, 93, 93, 70, 70, 70, 70, 70, 70, 70,147,148, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 149,149,150,149,149,149,149,149,149,151,151,152,153,152,152,152, 154,154, 46, 46, 46, 46,151,155,151,155,155,155,151,156,151,151, @@ -2707,7 +2735,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 6 */ 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, 174,177,176,178,176,176,176,176,176,176,176,176,176,176,176,176, -179,176,176,180,181,179,176,176,176,176,176,176,176,182,179,176, +176,176,176,179,180,181,176,176,176,176,176,176,176,182,181,176, 183,184,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,185,176,176,186,176,176,176,176,176,176,176,176,176,187, 176,176,176,176,176,176,176,176,188,189,189,189,189,176,190,176, @@ -2757,419 +2785,419 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 11 */ 291,291,291,291,291,291,291,292,290,293,294,196,196,295,295,296, 297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, -298,298,299,298,298,298,298,298,298,298,298,298,298,298,298,298, -300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,300, -302,300,300,303,300,304,302,304,297,297,297,297,297,297,297,297, -305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305, -305,305,305,305,305,305,305,305,305,305,305,297,297,297,297,305, -305,305,305,302,306,297,297,297,297,297,297,297,297,297,297,297, +298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, +299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,299, +301,299,299,302,299,299,301,299,297,297,297,297,297,297,297,297, +303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303, +303,303,303,303,303,303,303,303,303,303,303,297,297,297,297,303, +303,303,303,301,304,297,297,297,297,297,297,297,297,297,297,297, /* block 12 */ -307,307,307,307,307,308,309,309,310,311,311,312,313,314,315,315, -316,316,316,316,316,316,316,316,316,316,316,317,318,319,319,320, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -322,321,321,321,321,321,321,321,321,321,321,323,323,323,323,323, -323,323,323,324,325,325,316,326,327,316,316,316,316,316,316,316, -328,328,328,328,328,328,328,328,328,328,311,329,329,314,321,321, -324,321,321,330,321,321,321,321,321,321,321,321,321,321,321,321, +305,305,305,305,305,306,307,307,308,309,309,310,311,312,313,313, +314,314,314,314,314,314,314,314,314,314,314,315,316,317,317,318, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +320,319,319,319,319,319,319,319,319,319,319,321,321,321,321,321, +321,321,321,322,323,323,314,324,325,314,314,314,314,314,314,314, +326,326,326,326,326,326,326,326,326,326,309,327,327,312,319,319, +322,319,319,328,319,319,319,319,319,319,319,319,319,319,319,319, /* block 13 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,331,321,316,316,316,316,316,316,332,308,315,333, -333,316,316,332,316,334,334,332,332,315,333,333,333,316,321,321, -335,335,335,335,335,335,335,335,335,335,321,321,321,336,336,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,329,319,314,314,314,314,314,314,330,306,313,331, +331,314,314,330,314,332,332,330,330,313,331,331,331,314,319,319, +333,333,333,333,333,333,333,333,333,333,319,319,319,334,334,319, /* block 14 */ -337,337,337,338,338,338,338,338,338,338,338,339,338,339,340,341, -342,343,342,342,342,342,342,342,342,342,342,342,342,342,342,342, +335,335,335,336,336,336,336,336,336,336,336,337,336,337,338,339, +340,341,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, 342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342, -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -345,345,345,345,345,345,345,345,345,345,345,340,340,342,342,342, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +343,343,343,343,343,343,343,343,343,343,343,338,338,340,340,340, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 15 */ -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,347,347,347,347,347,347,347,347,347,347, -347,346,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350, -350,350,350,350,351,351,352,353,354,355,356,297,297,357,358,358, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345, +345,344,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348, +348,348,348,348,349,349,350,351,352,353,354,297,297,355,356,356, /* block 16 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,360,360,361,361,362,360,360,360,360,360, -360,360,360,360,362,360,360,360,362,360,360,360,360,363,297,297, -364,364,364,364,364,364,365,366,364,366,364,364,364,366,366,297, -367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367, -367,367,367,367,367,367,367,367,367,368,368,368,297,297,369,297, -342,342,342,342,342,342,342,342,342,342,342,340,340,340,340,340, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, +357,357,357,357,357,357,358,358,359,359,360,358,358,358,358,358, +358,358,358,358,360,358,358,358,360,358,358,358,358,361,297,297, +362,362,362,362,362,362,363,364,362,364,362,362,362,364,364,297, +365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, +365,365,365,365,365,365,365,365,365,366,366,366,297,297,367,297, +340,340,340,340,340,340,340,340,340,340,340,338,338,338,338,338, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 17 */ -321,321,321,321,321,321,321,321,370,321,321,321,321,321,321,340, -307,307,340,340,340,340,340,316,333,333,333,333,333,333,333,333, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,334,327,327,333,327,327,327, -333,333,333,371,316,316,316,316,316,316,316,316,316,316,316,316, -372,372,308,326,326,326,326,326,326,326,333,333,333,333,333,333, -326,326,326,373,326,326,326,326,326,326,326,326,326,326,326,316, +319,319,319,319,319,319,319,319,368,319,319,319,319,319,319,319, +305,305,338,338,338,338,338,314,331,331,331,331,331,331,331,331, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,332,325,325,331,325,325,325, +331,331,331,369,314,314,314,314,314,314,314,314,314,314,314,314, +370,370,306,324,324,324,324,324,324,324,331,331,331,331,331,331, +324,324,324,371,324,324,324,324,324,324,324,324,324,324,324,314, /* block 18 */ -374,374,374,375,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,374,375,378,376,375,375, -375,374,374,374,374,374,374,374,374,375,375,375,375,379,375,375, -376,380,381,176,176,374,374,374,377,377,377,377,377,377,377,377, -376,376,374,374,382,383,384,384,384,384,384,384,384,384,384,384, -385,386,376,376,376,376,376,376,377,377,377,377,377,377,377,377, +372,372,372,373,374,374,374,374,374,374,374,374,374,374,374,374, +374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,372,373,376,374,373,373, +373,372,372,372,372,372,372,372,372,373,373,373,373,377,373,373, +374,378,379,176,176,372,372,372,375,375,375,375,375,375,375,375, +374,374,372,372,380,381,382,382,382,382,382,382,382,382,382,382, +383,384,374,374,374,374,374,374,375,375,375,375,375,375,375,375, /* block 19 */ -387,388,389,389,196,387,387,387,387,387,387,387,387,196,196,387, -387,196,196,387,387,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,390,390,390,390,390,196,390,390,390,390,390,390, -390,196,390,196,196,196,390,390,390,390,196,196,391,387,392,389, -389,388,388,388,388,196,196,389,389,196,196,389,389,393,387,196, -196,196,196,196,196,196,196,392,196,196,196,196,390,390,196,390, -387,387,388,388,196,196,394,394,394,394,394,394,394,394,394,394, -390,390,395,395,396,396,396,396,396,396,397,395,387,398,399,196, +385,386,387,387,196,385,385,385,385,385,385,385,385,196,196,385, +385,196,196,385,385,388,388,388,388,388,388,388,388,388,388,388, +388,388,388,388,388,388,388,388,388,196,388,388,388,388,388,388, +388,196,388,196,196,196,388,388,388,388,196,196,389,385,390,387, +387,386,386,386,386,196,196,387,387,196,196,387,387,391,385,196, +196,196,196,196,196,196,196,390,196,196,196,196,388,388,196,388, +385,385,386,386,196,196,392,392,392,392,392,392,392,392,392,392, +388,388,393,393,394,394,394,394,394,394,395,393,385,396,397,196, /* block 20 */ -196,400,400,401,196,402,402,402,402,402,402,196,196,196,196,402, -402,196,196,402,402,402,402,402,402,402,402,402,402,402,402,402, -402,402,402,402,402,402,402,402,402,196,402,402,402,402,402,402, -402,196,402,402,196,402,402,196,402,402,196,196,403,196,401,401, -401,400,400,196,196,196,196,400,400,196,196,400,400,404,196,196, -196,400,196,196,196,196,196,196,196,402,402,402,402,196,402,196, -196,196,196,196,196,196,405,405,405,405,405,405,405,405,405,405, -400,406,402,402,402,400,407,196,196,196,196,196,196,196,196,196, +196,398,398,399,196,400,400,400,400,400,400,196,196,196,196,400, +400,196,196,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,196,400,400,400,400,400,400, +400,196,400,400,196,400,400,196,400,400,196,196,401,196,399,399, +399,398,398,196,196,196,196,398,398,196,196,398,398,402,196,196, +196,398,196,196,196,196,196,196,196,400,400,400,400,196,400,196, +196,196,196,196,196,196,403,403,403,403,403,403,403,403,403,403, +398,404,400,400,400,398,405,196,196,196,196,196,196,196,196,196, /* block 21 */ -196,408,408,409,196,410,410,410,410,410,410,410,410,410,196,410, -410,410,196,410,410,411,411,411,411,411,411,411,411,411,411,411, -411,411,411,411,411,411,411,411,411,196,411,411,411,411,411,411, -411,196,411,411,196,411,411,411,411,411,196,196,412,410,409,409, -409,408,408,408,408,408,196,408,408,409,196,409,409,413,196,196, -410,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -410,410,408,408,196,196,414,414,414,414,414,414,414,414,414,414, -415,416,196,196,196,196,196,196,196,411,408,417,408,412,412,412, +196,406,406,407,196,408,408,408,408,408,408,408,408,408,196,408, +408,408,196,408,408,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,196,409,409,409,409,409,409, +409,196,409,409,196,409,409,409,409,409,196,196,410,408,407,407, +407,406,406,406,406,406,196,406,406,407,196,407,407,411,196,196, +408,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +408,408,406,406,196,196,412,412,412,412,412,412,412,412,412,412, +413,414,196,196,196,196,196,196,196,409,406,415,406,410,410,410, /* block 22 */ -196,418,419,419,196,420,420,420,420,420,420,420,420,196,196,420, -420,196,196,420,420,421,421,421,421,421,421,421,421,421,421,421, -421,421,421,421,421,421,421,421,421,196,421,421,421,421,421,421, -421,196,421,421,196,421,421,421,421,421,196,196,422,420,423,418, -419,418,418,418,418,196,196,419,419,196,196,419,419,424,196,196, -196,196,196,196,196,425,418,423,196,196,196,196,421,421,196,421, -420,420,418,418,196,196,426,426,426,426,426,426,426,426,426,426, -427,421,428,428,428,428,428,428,196,196,196,196,196,196,196,196, +196,416,417,417,196,418,418,418,418,418,418,418,418,196,196,418, +418,196,196,418,418,419,419,419,419,419,419,419,419,419,419,419, +419,419,419,419,419,419,419,419,419,196,419,419,419,419,419,419, +419,196,419,419,196,419,419,419,419,419,196,196,420,418,421,416, +417,416,416,416,416,196,196,417,417,196,196,417,417,422,196,196, +196,196,196,196,196,423,416,421,196,196,196,196,419,419,196,419, +418,418,416,416,196,196,424,424,424,424,424,424,424,424,424,424, +425,419,426,426,426,426,426,426,196,196,196,196,196,196,196,196, /* block 23 */ -196,196,429,430,196,430,430,430,430,430,430,196,196,196,430,430, -430,196,430,430,430,430,196,196,196,430,430,196,430,196,430,430, -196,196,196,430,430,196,196,196,430,430,430,196,196,196,430,430, -430,430,430,430,430,430,430,430,430,430,196,196,196,196,431,432, -429,432,432,196,196,196,432,432,432,196,432,432,432,433,196,196, -430,196,196,196,196,196,196,431,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,434,434,434,434,434,434,434,434,434,434, -435,435,435,436,437,437,437,437,437,438,437,196,196,196,196,196, +196,196,427,428,196,428,428,428,428,428,428,196,196,196,428,428, +428,196,428,428,428,428,196,196,196,428,428,196,428,196,428,428, +196,196,196,428,428,196,196,196,428,428,428,196,196,196,428,428, +428,428,428,428,428,428,428,428,428,428,196,196,196,196,429,430, +427,430,430,196,196,196,430,430,430,196,430,430,430,431,196,196, +428,196,196,196,196,196,196,429,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,432,432,432,432,432,432,432,432,432,432, +433,433,433,434,435,435,435,435,435,436,435,196,196,196,196,196, /* block 24 */ -439,440,440,440,439,441,441,441,441,441,441,441,441,196,441,441, -441,196,441,441,441,442,442,442,442,442,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,196,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,442,196,196,443,441,439,439, -439,440,440,440,440,196,439,439,439,196,439,439,439,444,196,196, -196,196,196,196,196,439,439,196,442,442,442,196,196,441,196,196, -441,441,439,439,196,196,445,445,445,445,445,445,445,445,445,445, -196,196,196,196,196,196,196,446,447,447,447,447,447,447,447,448, +437,438,438,438,437,439,439,439,439,439,439,439,439,196,439,439, +439,196,439,439,439,440,440,440,440,440,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,196,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,440,196,196,441,439,437,437, +437,438,438,438,438,196,437,437,437,196,437,437,437,442,196,196, +196,196,196,196,196,437,437,196,440,440,440,196,439,439,196,196, +439,439,437,437,196,196,443,443,443,443,443,443,443,443,443,443, +196,196,196,196,196,196,196,444,445,445,445,445,445,445,445,446, /* block 25 */ -449,450,451,451,452,449,449,449,449,449,449,449,449,196,449,449, -449,196,449,449,449,449,449,449,449,449,449,449,449,449,449,449, -449,449,449,449,449,449,449,449,449,196,449,449,449,449,449,449, -449,449,449,449,196,449,449,449,449,449,196,196,453,449,451,454, -455,451,455,451,451,196,454,455,455,196,455,455,450,456,196,196, -196,196,196,196,196,455,455,196,196,196,196,196,196,449,449,196, -449,449,450,450,196,196,457,457,457,457,457,457,457,457,457,457, -196,449,449,451,196,196,196,196,196,196,196,196,196,196,196,196, +447,448,449,449,450,447,447,447,447,447,447,447,447,196,447,447, +447,196,447,447,447,447,447,447,447,447,447,447,447,447,447,447, +447,447,447,447,447,447,447,447,447,196,447,447,447,447,447,447, +447,447,447,447,196,447,447,447,447,447,196,196,451,447,449,452, +453,449,453,449,449,196,452,453,453,196,453,453,448,454,196,196, +196,196,196,196,196,453,453,196,196,196,196,196,447,447,447,196, +447,447,448,448,196,196,455,455,455,455,455,455,455,455,455,455, +196,447,447,449,196,196,196,196,196,196,196,196,196,196,196,196, /* block 26 */ -458,458,459,459,460,460,460,460,460,460,460,460,460,196,460,460, -460,196,460,460,460,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,462,462,460,463,459, -459,458,458,458,458,196,459,459,459,196,459,459,459,462,464,465, -196,196,196,196,460,460,460,463,466,466,466,466,466,466,466,460, -460,460,458,458,196,196,467,467,467,467,467,467,467,467,467,467, -466,466,466,466,466,466,466,466,466,465,460,460,460,460,460,460, +456,456,457,457,458,458,458,458,458,458,458,458,458,196,458,458, +458,196,458,458,458,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,460,460,458,461,457, +457,456,456,456,456,196,457,457,457,196,457,457,457,460,462,463, +196,196,196,196,458,458,458,461,464,464,464,464,464,464,464,458, +458,458,456,456,196,196,465,465,465,465,465,465,465,465,465,465, +464,464,464,464,464,464,464,464,464,463,458,458,458,458,458,458, /* block 27 */ -196,468,469,469,196,470,470,470,470,470,470,470,470,470,470,470, -470,470,470,470,470,470,470,196,196,196,470,470,470,470,470,470, -470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470, -470,470,196,470,470,470,470,470,470,470,470,470,196,470,196,196, -470,470,470,470,470,470,470,196,196,196,471,196,196,196,196,472, -469,469,468,468,468,196,468,196,469,469,469,469,469,469,469,472, -196,196,196,196,196,196,473,473,473,473,473,473,473,473,473,473, -196,196,469,469,474,196,196,196,196,196,196,196,196,196,196,196, +196,466,467,467,196,468,468,468,468,468,468,468,468,468,468,468, +468,468,468,468,468,468,468,196,196,196,468,468,468,468,468,468, +468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468, +468,468,196,468,468,468,468,468,468,468,468,468,196,468,196,196, +468,468,468,468,468,468,468,196,196,196,469,196,196,196,196,470, +467,467,466,466,466,196,466,196,467,467,467,467,467,467,467,470, +196,196,196,196,196,196,471,471,471,471,471,471,471,471,471,471, +196,196,467,467,472,196,196,196,196,196,196,196,196,196,196,196, /* block 28 */ -196,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,476,475,477,476,476,476,476,476,476,478,196,196,196,196,479, -480,480,480,480,480,475,481,482,482,482,482,482,482,476,482,483, -484,484,484,484,484,484,484,484,484,484,485,485,196,196,196,196, +196,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,474,473,475,474,474,474,474,474,474,476,196,196,196,196,477, +478,478,478,478,478,473,479,480,480,480,480,480,480,474,480,481, +482,482,482,482,482,482,482,482,482,482,483,483,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 29 */ -196,486,486,196,486,196,486,486,486,486,486,196,486,486,486,486, -486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486, -486,486,486,486,196,486,196,486,486,486,486,486,486,486,486,486, -486,487,486,488,487,487,487,487,487,487,489,487,487,486,196,196, -490,490,490,490,490,196,491,196,492,492,492,492,492,487,493,196, -494,494,494,494,494,494,494,494,494,494,196,196,486,486,486,486, +196,484,484,196,484,196,484,484,484,484,484,196,484,484,484,484, +484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484, +484,484,484,484,196,484,196,484,484,484,484,484,484,484,484,484, +484,485,484,486,485,485,485,485,485,485,487,485,485,484,196,196, +488,488,488,488,488,196,489,196,490,490,490,490,490,485,491,196, +492,492,492,492,492,492,492,492,492,492,196,196,484,484,484,484, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 30 */ -495,496,496,496,497,497,497,497,498,497,497,497,497,498,498,498, -498,498,498,496,497,496,496,496,499,499,496,496,496,496,496,496, -500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501, -501,501,501,501,496,499,496,499,496,499,502,503,502,503,504,504, -495,495,495,495,495,495,495,495,196,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,196,196,196, -196,505,505,505,505,505,505,506,505,506,505,505,505,505,505,507, +493,494,494,494,495,495,495,495,496,495,495,495,495,496,496,496, +496,496,496,494,495,494,494,494,497,497,494,494,494,494,494,494, +498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499, +499,499,499,499,494,497,494,497,494,497,500,501,500,501,502,502, +493,493,493,493,493,493,493,493,196,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,196,196,196, +196,503,503,503,503,503,503,504,503,504,503,503,503,503,503,505, /* block 31 */ -505,505,508,508,509,497,499,499,495,495,495,495,495,505,505,505, -505,505,505,505,505,505,505,505,196,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,196,496,496, -496,496,496,496,496,496,499,496,496,496,496,496,496,196,496,496, -497,497,497,497,497,510,510,510,510,497,497,196,196,196,196,196, +503,503,506,506,507,495,497,497,493,493,493,493,493,503,503,503, +503,503,503,503,503,503,503,503,196,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,196,494,494, +494,494,494,494,494,494,497,494,494,494,494,494,494,196,494,494, +495,495,495,495,495,508,508,508,508,495,495,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 32 */ -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,512,512,513,513,513, -513,514,513,513,513,513,513,515,512,516,516,514,514,513,513,511, -517,517,517,517,517,517,517,517,517,517,518,518,519,519,519,519, -511,511,511,511,511,511,514,514,513,513,511,511,511,511,513,513, -513,511,512,520,520,511,511,512,512,520,520,520,520,520,511,511, -511,513,513,513,513,511,511,511,511,511,511,511,511,511,511,511, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,510,510,511,511,511, +511,512,511,511,511,511,511,513,510,514,514,512,512,511,511,509, +515,515,515,515,515,515,515,515,515,515,516,516,517,517,517,517, +509,509,509,509,509,509,512,512,511,511,509,509,509,509,511,511, +511,509,510,518,518,509,509,510,510,518,518,518,518,518,509,509, +509,511,511,511,511,509,509,509,509,509,509,509,509,509,509,509, /* block 33 */ -511,511,513,512,514,513,513,520,520,520,520,520,520,521,511,520, -522,522,522,522,522,522,522,522,522,522,520,520,512,513,523,523, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,196,524,196,196,196,196,196,524,196,196, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,526,527,525,525,525, +509,509,511,510,512,511,511,518,518,518,518,518,518,519,509,518, +520,520,520,520,520,520,520,520,520,520,518,518,510,511,521,521, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,196,522,196,196,196,196,196,522,196,196, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,524,525,523,523,523, /* block 34 */ -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,529, -530,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527, +528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, /* block 35 */ -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, /* block 36 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,196,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,196,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 37 */ -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,196, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,196, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 38 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,196,196,534,534,534, -535,536,537,536,536,536,536,537,537,538,538,538,538,538,538,538, -538,538,539,539,539,539,539,539,539,539,539,539,539,196,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,196,196,532,532,532, +533,534,535,534,534,534,534,535,535,536,536,536,536,536,536,536, +536,536,537,537,537,537,537,537,537,537,537,537,537,196,196,196, /* block 39 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -540,540,540,540,540,540,540,540,540,540,196,196,196,196,196,196, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -542,542,542,542,542,542,196,196,543,543,543,543,543,543,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +538,538,538,538,538,538,538,538,538,538,196,196,196,196,196,196, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +540,540,540,540,540,540,196,196,541,541,541,541,541,541,196,196, /* block 40 */ -544,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 41 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 42 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,546,547,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,544,545,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 43 */ -548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549, -549,549,549,549,549,549,549,549,549,549,549,550,551,196,196,196, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,553,553,553,554,554, -554,552,552,552,552,552,552,552,552,196,196,196,196,196,196,196, +546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547, +547,547,547,547,547,547,547,547,547,547,547,548,549,196,196,196, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,551,551,551,552,552, +552,550,550,550,550,550,550,550,550,196,196,196,196,196,196,196, /* block 44 */ -555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555, -555,555,556,556,557,558,196,196,196,196,196,196,196,196,196,555, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,560,560,561,562,562,196,196,196,196,196,196,196,196,196, -563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563, -563,563,564,564,196,196,196,196,196,196,196,196,196,196,196,196, -565,565,565,565,565,565,565,565,565,565,565,565,565,196,565,565, -565,196,566,566,196,196,196,196,196,196,196,196,196,196,196,196, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,554,554,555,556,196,196,196,196,196,196,196,196,196,553, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +557,557,558,558,559,560,560,196,196,196,196,196,196,196,196,196, +561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561, +561,561,562,562,196,196,196,196,196,196,196,196,196,196,196,196, +563,563,563,563,563,563,563,563,563,563,563,563,563,196,563,563, +563,196,564,564,196,196,196,196,196,196,196,196,196,196,196,196, /* block 45 */ -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,568,568,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,569,569,570,571,571,571,571,571,571,571,570,570, -570,570,570,570,570,570,571,570,570,572,572,572,572,572,572,572, -572,572,573,572,574,574,575,576,577,577,575,578,567,572,196,196, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,566,566,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,567,567,568,569,569,569,569,569,569,569,568,568, +568,568,568,568,568,568,569,568,568,570,570,570,570,570,570,570, +570,570,571,570,572,572,573,574,575,575,573,576,577,570,196,196, +578,578,578,578,578,578,578,578,578,578,196,196,196,196,196,196, 579,579,579,579,579,579,579,579,579,579,196,196,196,196,196,196, -580,580,580,580,580,580,580,580,580,580,196,196,196,196,196,196, /* block 46 */ -581,581,582,583,584,582,585,581,584,586,587,588,588,588,589,588, -590,590,590,590,590,590,590,590,590,590,196,196,196,196,196,196, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,592,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,196,196,196,196,196,196,196, +580,580,581,582,583,581,584,580,583,585,586,587,587,587,588,587, +589,589,589,589,589,589,589,589,589,589,196,196,196,196,196,196, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,591,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,196, /* block 47 */ -591,591,591,591,591,593,593,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,594,591,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,196,196,196,196,196,196,196,196,196,196, +590,590,590,590,590,592,592,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,593,590,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,196,196,196,196,196,196,196,196,196,196, /* block 48 */ -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,196, -596,596,596,597,597,597,597,596,596,597,597,597,196,196,196,196, -597,597,596,597,597,597,597,597,597,598,598,598,196,196,196,196, -599,196,196,196,600,600,601,601,601,601,601,601,601,601,601,601, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,196,196, -602,602,602,602,602,196,196,196,196,196,196,196,196,196,196,196, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,196, +595,595,595,596,596,596,596,595,595,596,596,596,196,196,196,196, +596,596,595,596,596,596,596,596,596,597,597,597,196,196,196,196, +598,196,196,196,599,599,600,600,600,600,600,600,600,600,600,600, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,196,196, +601,601,601,601,601,196,196,196,196,196,196,196,196,196,196,196, /* block 49 */ -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,196,196,196,196, -603,603,603,603,603,604,604,604,603,603,604,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,196,196,196,196,196,196, -605,605,605,605,605,605,605,605,605,605,606,196,196,196,607,607, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,196,196,196,196, +602,602,602,602,602,603,603,603,602,602,603,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,196,196,196,196,196,196, +604,604,604,604,604,604,604,604,604,604,605,196,196,196,606,606, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, /* block 50 */ -609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609, -609,609,609,609,609,609,609,610,610,611,611,610,196,196,612,612, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,614,615,614,615,615,615,615,615,615,615,196, -616,617,615,617,617,615,615,615,615,615,615,615,615,614,614,614, -614,614,614,615,615,618,618,618,618,618,618,618,618,196,196,618, +608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +608,608,608,608,608,608,608,609,609,610,610,609,196,196,611,611, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,613,614,613,614,614,614,614,614,614,614,196, +615,616,614,616,616,614,614,614,614,614,614,614,614,613,613,613, +613,613,613,614,614,617,617,617,617,617,617,617,617,196,196,617, /* block 51 */ -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -620,620,620,620,620,620,620,621,622,622,622,622,620,620,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,623,624, -624,176,176,176,176,176,176,176,176,176,176,176,624,624,624,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +619,619,619,619,619,619,619,620,621,621,621,621,619,619,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,622,623, +623,176,176,176,176,176,176,176,176,176,176,176,623,623,623,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 52 */ -625,625,625,625,626,627,627,627,627,627,627,627,627,627,627,627, +624,624,624,624,625,626,626,626,626,626,626,627,627,626,626,626, +626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627, 627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,628,629,625,625,625,625,625,629,625,629,626,626, -626,626,625,629,630,627,627,627,627,627,627,627,627,196,631,631, +627,627,627,627,628,629,624,624,624,624,624,629,624,629,625,625, +625,625,624,629,630,627,627,627,627,627,627,627,627,196,631,631, 632,632,632,632,632,632,632,632,632,632,631,631,633,634,631,631, 633,635,635,635,635,635,635,635,635,635,635,628,628,628,628,628, 628,628,628,628,635,635,635,635,635,635,635,635,635,631,631,631, @@ -3178,51 +3206,51 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 636,636,637,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,637,636,636,636,636,637,637,636,636,639,640,636,636,638,638, -641,641,641,641,641,641,641,641,641,641,638,638,638,638,638,638, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,643,644,645,645,644,644,644,645,644,645, -645,645,646,646,196,196,196,196,196,196,196,196,647,647,647,647, +641,641,641,641,641,641,641,641,641,641,642,638,638,638,642,642, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,644,645,646,646,645,645,645,646,645,646, +646,646,647,647,196,196,196,196,196,196,196,196,648,648,648,648, /* block 54 */ -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,649,649,649,649,649,649,649,649,650,650,650,650, -650,650,650,650,649,649,651,652,196,196,196,653,653,654,654,654, -655,655,655,655,655,655,655,655,655,655,196,196,196,648,648,648, -656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,658,658,658,659,658,658,660,660, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,650,650,650,650,650,650,650,650,651,651,651,651, +651,651,651,651,650,650,652,653,196,196,196,654,654,655,655,655, +656,656,656,656,656,656,656,656,656,656,196,196,196,649,649,649, +657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,659,659,659,660,659,659,661,661, /* block 55 */ -661,662,663,664,665,666,667,668,669,275,276,196,196,196,196,196, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,196,196,670,670,670, -671,671,671,671,671,671,671,671,196,196,196,196,196,196,196,196, -672,673,672,674,673,675,675,676,675,676,677,673,676,676,673,673, -676,678,673,673,673,673,673,673,673,679,680,681,681,675,681,681, -681,681,682,683,684,680,680,685,686,686,687,196,196,196,196,196, +662,663,664,665,666,667,668,669,670,275,276,196,196,196,196,196, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,196,196,671,671,671, +672,672,672,672,672,672,672,672,196,196,196,196,196,196,196,196, +673,674,673,675,674,676,677,678,679,680,681,674,680,680,674,674, +680,682,683,674,674,674,674,674,674,684,685,686,687,688,687,687, +687,687,689,690,691,692,692,693,694,694,695,196,196,196,196,196, /* block 56 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70,256,256,256,256,256,688,149,149,149,149, + 70, 70, 70, 70, 70, 70,256,256,256,256,256,696,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, -149,149,149,149,149,149,149,149,149,149,149,149,149,689,689,689, -689,689,150,149,149,149,689,689,689,689,689, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70,690,691, 70, 70, 70,692, 70, 70, +149,149,149,149,149,149,149,149,149,149,149,149,149,697,697,697, +697,697,150,149,149,149,697,697,697,697,697, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70,698,699, 70, 70, 70,700, 70, 70, /* block 57 */ - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,693, 70, - 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,695,695,695,695,695, -695,695,695,695,696,695,695,695,696,695,695,695,695,695,695,695, -695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,697, -698,698,189,189,176,176,176,176,176,176,176,176,176,176,176,176, -189,189,189,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,176,176,176,699,176,700,176,176,176,176,176, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,701, 70, + 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,149,149,149,149,149, +149,149,149,149,150,149,149,149,150,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,703, +704,704,189,189,176,176,176,176,176,176,176,176,176,176,176,176, +189,189,189,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,176,176,176,705,176,706,176,176,176,176,176, /* block 58 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, @@ -3231,12 +3259,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -701,702, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +707,708, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 59 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,703,704, 70, 70,705, 70, + 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,709,710, 70, 70,711, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66, @@ -3245,123 +3273,123 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 60 */ -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -708,706,708,706,708,706,708,706,196,707,196,707,196,707,196,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -709,709,710,710,710,710,711,711,712,712,713,713,714,714,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +714,712,714,712,714,712,714,712,196,713,196,713,196,713,196,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +715,715,716,716,716,716,717,717,718,718,719,719,720,720,196,196, /* block 61 */ -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -706,706,717,718,717,196,708,717,707,707,719,719,720,201,721,201, -201,201,717,718,717,196,708,717,722,722,722,722,720,201,201,201, -706,706,708,723,196,196,708,708,707,707,724,724,196,201,201,201, -706,706,708,725,708,250,708,708,707,707,726,726,255,201,201,201, -196,196,717,718,717,196,708,717,727,727,728,728,720,201,201,196, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +712,712,723,724,723,196,714,723,713,713,725,725,726,201,727,201, +201,201,723,724,723,196,714,723,728,728,728,728,726,201,201,201, +712,712,714,729,196,196,714,714,713,713,730,730,196,201,201,201, +712,712,714,731,714,250,714,714,713,713,732,732,255,201,201,201, +196,196,723,724,723,196,714,723,733,733,734,734,726,201,201,196, /* block 62 */ -729,729,729,729,729,729,729,729,729,729,729, 51,730,731,732,733, -734,734,734,734,734,734,735, 43,736,737,738,739,739,740,738,739, - 43, 43, 43, 43,741, 43, 43,742,743,744,745,746,747,748,749,750, -751,751,752,752,752, 43, 43, 43, 43, 49, 57, 43,753,754, 43,755, -756, 43, 43, 43,757,758,759,754,754,753, 43, 43, 43, 43, 43,760, - 43, 43, 50,761,755, 43, 43, 43, 43, 43,762, 43, 43,763, 43,729, - 51,764,764,764,764,765,766,767,768,769,770,770,770,770,770,770, - 54,696,196,196, 54, 54, 54, 54, 54, 54,771,772,773,774,775,695, +735,735,735,735,735,735,735,735,735,735,735, 51,736,737,738,739, +740,740,740,740,740,740,741, 43,742,743,744,745,745,746,744,745, + 43, 43, 43, 43,747, 43, 43,748,749,750,751,752,753,754,755,756, +757,757,758,758,758, 43, 43, 43, 43, 49, 57, 43,759,760, 43,761, +762, 43, 43, 43,763,764,765,760,760,759, 43, 43, 43, 43, 43,766, + 43, 43, 50,767,761, 43, 43, 43, 43, 43,768, 43, 43,769, 43,735, + 51,770,770,770,770,771,772,773,774,775,776,776,776,776,776,776, + 54,777,196,196, 54, 54, 54, 54, 54, 54,778,779,780,781,782,783, /* block 63 */ - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,771,772,773,774,775,196, -695,695,695,695,695,695,695,695,695,695,695,695,695,196,196,196, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -777,777,777,777,777,777,777,777,777,777,777,777,777,778,778,778, -778,777,778,779,778,777,777,189,189,189,189,777,777,777,777,777, -780,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,778,779,780,781,782,196, +783,783,783,783,783,783,783,783,783,783,783,783,783,196,196,196, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,784,784,784,784,784,784,784,784,784,784,784,784,784,784, +785,785,785,785,785,785,785,785,785,785,785,785,785,786,786,786, +786,785,786,787,786,785,785,189,189,189,189,785,785,785,785,785, +788,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 64 */ -781,781,782,781,781,781,781,782,781,781,783,782,782,782,783,783, -782,782,782,783,781,782,781,781,784,782,782,782,782,782,781,781, -781,781,785,781,782,781,786,781,782,787,788,789,782,782,790,783, -782,782,791,782,783,792,792,792,792,793,781,781,783,783,782,782, -794,794,794,794,794,782,783,783,795,795,781,794,781,781,796,510, +789,789,790,789,789,789,789,790,789,789,791,790,790,790,791,791, +790,790,790,791,789,790,789,789,792,790,790,790,790,790,789,789, +789,789,793,789,790,789,794,789,790,795,796,797,790,790,798,791, +790,790,799,790,791,800,800,800,800,801,789,789,791,791,790,790, +802,802,802,802,802,790,791,791,803,803,789,802,789,789,804,508, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, -798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798, +805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, +806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806, /* block 65 */ -799,799,799, 65, 66,799,799,799,799, 58,781,781,196,196,196,196, - 50, 50, 50, 50,800,801,801,801,801,801, 50, 50,802,802,802,802, - 50,802,802, 50,802,802, 50,802, 45,801,801,802,802,802, 50, 45, -802,802, 45, 45, 45, 45,802,802, 45, 45, 45, 45,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,802,802, 50, 50, -802,802, 50,802, 50,802,802,802,802,802,802,802, 45,802, 45, 45, - 45, 45, 45, 45,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +807,807,807, 65, 66,807,807,807,807, 58,789,789,196,196,196,196, + 50, 50, 50, 50,808,809,809,809,809,809, 50, 50,810,810,810,810, + 50,810,810, 50,810,810, 50,810, 45,809,809,810,810,810, 50, 45, +810,810, 45, 45, 45, 45,810,810, 45, 45, 45, 45,810,810,810,810, +810,810,810,810,810,810,810,810,810,810,810,810,810,810, 50, 50, +810,810, 50,810, 50,810,810,810,810,810,810,810, 45,810, 45, 45, + 45, 45, 45, 45,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 66 */ - 50, 50,803, 50, 50, 50, 50,803,804,804,804,804,804,804, 50, 50, - 50, 50,805, 53, 50,804, 50, 50, 50, 50, 50, 50, 50, 50,803,804, -804,804,804, 50,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, - 50, 50, 50,804, 50,804, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, - 50, 50,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804,804,804,804,804,804,804, 50, 50,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, + 50, 50,811, 50, 50, 50, 50,811,812,812,812,812,812,812, 50, 50, + 50, 50,813, 53, 50,812, 50, 50, 50, 50, 50, 50, 50, 50,811,812, +812,812,812, 50,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, + 50, 50, 50,812, 50,812, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, + 50, 50,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,812,812,812,812,812,812,812,812, 50, 50,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, /* block 67 */ -804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, 50,804, -804,804,804, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50,804,804, 50, 50,804, 50,804,804, 50,804, 50, 50, 50, 50, -804,804,804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804, 50, 50, -804,804, 50, 50, 50, 50,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, -804,804,804,804,804, 50,804,804, 50, 50,804,804,804,804,804, 50, +812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, 50,812, +812,812,812, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50,812,812, 50, 50,812, 50,812,812, 50,812, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812, 50, 50, +812,812, 50, 50, 50, 50,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, +812,812,812,812,812, 50,812,812, 50, 50,812,812,812,812,812, 50, /* block 68 */ - 45, 45, 45, 45, 45, 45, 45, 45,806,807,806,807, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, 45, - 50, 50, 45, 45, 45, 45, 45, 45, 47,809,810, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811, 45, 50, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45,814,815,814,815, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, + 50, 50, 45, 45, 45, 45, 45, 45, 47,817,818, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819, 45, 50, 45, 45, 45, /* block 69 */ - 45, 45, 45, 45, 45, 45, 45, 45,812, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45,811, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45,819, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,802,802, 45,802, 45, 45, 45, 45, 45, 45, 45, 45, + 50, 50, 50, 50,810,810, 45,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, -802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, - 50, 50,802, 45, 45, 45, 45, 45, 45,808,808,808,808, 47, 47, 47, -808, 47, 47,808, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, + 50, 50,810, 45, 45, 45, 45, 45, 45,816,816,816,816, 47, 47, 47, +816, 47, 47,816, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, /* block 70 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 71 */ - 58, 58, 58, 58, 58, 58, 58, 58,814,814,814,814,814,814,814,814, -814,814,814,814,814,814,814,814,814,814,814,814,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,815,815,815,815,815,815,815,815,815,815, -815,815,816,815,815,815,815,815,815,815,815,815,815,815,815,815, -817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817, -817,817,817,817,817,817,817,817,817,817, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58,821,821,821,821,821,821,821,821, +821,821,821,821,821,821,821,821,821,821,821,821,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,822,822,822,822,822,822,822,822,822,822, +822,822,823,822,822,822,822,822,822,822,822,822,822,822,822,822, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 72 */ @@ -3377,132 +3405,132 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 73 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -802,802, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,802,802, -802,802,802,802,802,802,801, 50, 45, 45, 45, 45,802,802,802,802, -801, 50, 45, 45, 45, 45,802,802, 45, 45,802,802, 45, 45, 45,802, -802,802,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45,802, 45,802, 45, 45,802,802,802,802,802,802, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,800,800,818,818, 50, +810,810, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,810,810, +810,810,810,810,810,810,809, 50, 45, 45, 45, 45,810,810,810,810, +809, 50, 45, 45, 45, 45,810,810, 45, 45,810,810, 45, 45, 45,810, +810,810,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45,810, 45,810, 45, 45,810,810,810,810,810,810, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,808,808,825,825, 50, /* block 74 */ - 47, 47, 47, 47, 47,819,802,812,812,812,812,812,812,812, 47,812, -812, 47,812, 45,808,808,812,812, 47,812,812,812,812,820,812,812, - 47,812, 47, 47,812,812, 47,812,812,812, 47,812,812,812, 47, 47, -812,812,812,812,812,812,812,812, 47, 47, 47,812,812,812,812,812, -801,812,801,812,812,812,812,812,808,808,808,808,808,808,808,808, -808,808,808,808,812,812,812,812,812,812,812,812,812,812,812, 47, -801,819,819,801,812, 47, 47,812, 47,812,812,812,812,819,819,821, -812,812,812,812,812,812,812,812,812,812,812, 47,812,812, 47,808, + 47, 47, 47, 47, 47,810,810, 45, 45, 45, 45, 45, 45, 45, 47, 45, + 45, 47, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45,826, 45, 45, + 47, 45, 47, 47, 45, 45, 47, 45, 45, 45, 47, 45, 45, 45, 47, 47, + 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +809, 45,809, 45, 45, 45, 45, 45,816,816,816,816,816,816,816,816, +816,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, +809,810,810,809, 45, 47, 47, 45, 47, 45, 45, 45, 45,810,810, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 47,816, /* block 75 */ -812,812,812,812,812,812, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -812,812, 47,808, 47, 47, 47, 47,812, 47,812, 47, 47,812,812,812, - 47,808,812,812,812,812,812, 47,812,812,808,808,822,812,812,812, - 47, 47,812,812,812,812,812,812,812,812,812,812,812,808,808,812, -812,812,812,812,808,808,812,812, 47,812,812,812,812,812,808, 47, -812, 47,812, 47,808,812,812,812,812,812,812,812,812,812,812,812, -812,812,812,812,812,812,812,812,812, 47,808,812,812,812,812,812, - 47, 47,808,808, 47,808,812, 47, 47,820,808,812,812,808,812,812, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47,816, 47, 47, 47, 47, 45, 47, 45, 47, 47, 45, 45, 45, + 47,816, 45, 45, 45, 45, 45, 47, 45, 45,816,816,819, 45, 45, 45, + 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, + 45, 45, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45, 45,816, 47, + 45, 47, 45, 47,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,816, 45, 45, 45, 45, 45, + 47, 47,816,816, 47,816, 45, 47, 47,826,816, 45, 45,816, 45, 45, /* block 76 */ -812,812, 47,812,812,808, 45, 45, 47, 47,823,823,820,820,812, 47, -812,812, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, - 45, 47, 45, 45, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47, 45, 45,816, 45, 45, 47, 47,827,827,826,826, 45, 47, + 45, 45, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, + 45, 47, 45, 45, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,808, 45,808, 45, - 45, 45, 45,808,808,808, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 47, 47,812,812,812,758,759,758,759,758,759,758,759, -758,759,758,759,758,759, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,816, 45,816, 45, + 45, 45, 45,816,816,816, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 47, 47, 45, 45, 45,764,765,764,765,764,765,764,765, +764,765,764,765,764,765, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 77 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 45,808,808,808, 45, 45, 45, 45, 45, 45, 45, 45, + 58, 58, 58, 58, 45,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808, - 50, 50, 50,804,804,806,807, 50,804,804, 50,804, 50,804, 50, 50, - 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50,804,804,804,804,806,807,806,807,806,807,806,807,806,807, +816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816, + 50, 50, 50,812,812,814,815, 50,812,812, 50,812, 50,812, 50, 50, + 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50,812,812,812,812,814,815,814,815,814,815,814,815,814,815, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 78 */ -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, /* block 79 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,800,800, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,808,808, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 80 */ - 50, 50, 50,806,807,806,807,806,807,806,807,806,807,806,807,806, -807,806,807,806,807,806,807,806,807, 50, 50,804, 50, 50, 50, 50, -804, 50, 50,804,804,804, 50, 50,804,804,804,804,804,804,804,804, - 50, 50, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, -804,804, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50,804, -804,804,804, 50,804,804, 50, 50,806,807,806,807, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50,804, 50, 50,804,804, 50, 50,806,807, 50, 50, + 50, 50, 50,814,815,814,815,814,815,814,815,814,815,814,815,814, +815,814,815,814,815,814,815,814,815, 50, 50,812, 50, 50, 50, 50, +812, 50, 50,812,812,812, 50, 50,812,812,812,812,812,812,812,812, + 50, 50, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, +812,812, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50,812, +812,812,812, 50,812,812, 50, 50,814,815,814,815, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50,812, 50, 50,812,812, 50, 50,814,815, 50, 50, /* block 81 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50,804,804, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804,804,804, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812,812,812, /* block 82 */ -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804, 50, 50, 50,804,804,804,804,804,804,804,804, 50,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50,804, 50, - 50, 50, 50,804,804,804, 50, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812, 50, 50, 50,812,812,812,812,812,812,812,812, 50,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,812, 50, + 50, 50, 50,812,812,812, 50, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, 50, 50, 50, 50, /* block 83 */ 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45, -808, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +816, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45,813,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45,820,820, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, /* block 84 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,825, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,829, 45, /* block 85 */ -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, - 65, 66,828,829,830,831,832, 65, 66, 65, 66, 65, 66,833,834,835, -836, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,696,695,837,837, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, + 65, 66,832,833,834,835,836, 65, 66, 65, 66, 65, 66,837,838,839, +840, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,777,783,841,841, /* block 86 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, @@ -3511,598 +3539,598 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, -246,247,246,247,838,839,839,839,839,839,839,246,247,246,247,840, -840,840,246,247,196,196,196,196,196,841,841,841,842,843,842,842, +246,247,246,247,842,843,843,843,843,843,843,246,247,246,247,844, +844,844,246,247,196,196,196,196,196,845,845,845,846,847,846,846, /* block 87 */ -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,196,844,196,196,196,196,196,844,196,196, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,196,196,196,196,196,196,196,846, -847,196,196,196,196,196,196,196,196,196,196,196,196,196,196,848, - -/* block 88 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,196,848,196,196,196,196,196,848,196,196, +849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, +849,849,849,849,849,849,849,849,196,196,196,196,196,196,196,850, +851,196,196,196,196,196,196,196,196,196,196,196,196,196,196,852, + +/* block 88 */ +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, /* block 89 */ - 43, 43,850,851,850,851, 43, 43, 43,850,851, 43,850,851, 43, 43, - 43, 43, 43, 43, 43, 43, 43,852, 43, 43,734, 43,850,851, 43, 43, -850,851,758,759,758,759,758,759,758,759, 43, 43, 43, 43,754,853, -854,855, 43, 43, 43, 43, 43, 43, 43, 43,734,734,856, 43, 43, 43, -734,857,738,858, 43, 43, 43, 43, 43, 43, 43, 43,859, 43,859,859, - 45, 45, 43,754,754,758,759,758,759,758,759,758,759,734,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 43, 43,854,855,854,855, 43, 43, 43,854,855, 43,854,855, 43, 43, + 43, 43, 43, 43, 43, 43, 43,856, 43, 43,740, 43,854,855, 43, 43, +854,855,764,765,764,765,764,765,764,765, 43, 43, 43, 43,760,857, +858,859, 43, 43, 43, 43, 43, 43, 43, 43,740,740,860, 43, 43, 43, +740,861,744,862, 43, 43, 43, 43, 43, 43, 43, 43,863, 43,863,863, + 45, 45, 43,760,760,764,765,764,765,764,765,764,765,740,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, /* block 90 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,196,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,196,196,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,196,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,196,196,196,196,196,196,196,196,196,196,196,196, /* block 91 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, /* block 92 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -861,861,862,862,861,861,861,861,861,861,861,861,861,861,863,863, +865,865,866,866,865,865,865,865,865,865,865,865,865,865,867,867, /* block 93 */ -729,864,865,866,781,867,868,869,870,871,872,873,874,875,874,875, -876,877, 45,878,876,877,876,877,876,877,876,877,879,880,881,881, - 45,869,869,869,869,869,869,869,869,869,882,882,882,882,883,883, -884,885,885,885,885,885,781,886,869,869,869,887,888,889,890,890, -196,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +735,868,869,870,789,871,872,873,874,875,876,877,878,879,878,879, +880,881, 45,882,880,881,880,881,880,881,880,881,883,884,885,885, + 45,873,873,873,873,873,873,873,873,873,886,886,886,886,887,887, +888,889,889,889,889,889,789,890,873,873,873,891,892,893,894,894, +196,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 94 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,196,196,892,892,893,893,894,894,891, -895,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,897,898,899,899,896, - -/* block 95 */ -196,196,196,196,196,900,900,900,900,900,900,900,900,900,900,900, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,196,196,896,896,897,897,898,898,895, +899,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -196,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,902,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, - -/* block 96 */ -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -903,903,904,904,904,904,903,903,903,903,903,903,903,903,903,903, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,196,196,196,196,196,196,196,196,196,861, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +900,900,900,900,900,900,900,900,900,900,900,901,902,903,903,900, -/* block 97 */ +/* block 95 */ +196,196,196,196,196,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +196,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,905,906,906,196, -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,907,907,907,907,907,907,907,907, -781, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,906,906,906,510, +905,905,905,905,906,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -/* block 98 */ -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,908,903,908,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -903,903,903,903,903,903,903,903,903,903,903,903,781,781,781,781, +/* block 96 */ +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +907,907,908,908,908,908,907,907,907,907,907,907,907,907,907,907, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,196,196,196,196,196,196,196,196,196,865, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, + +/* block 97 */ 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,910,910,196, +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,911,911,911,911,911,911,911,911, +789, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,903, +909,909,909,909,909,909,909,909,909,909,909,909,910,910,910,508, + +/* block 98 */ +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,912,907,912,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +907,907,907,907,907,907,907,907,907,907,907,907,789,789,789,789, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,907, /* block 99 */ -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,510,510,510,510,510,510,781,781,781,781,903,903,903,903,903, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,508,508,508,508,508,508,789,789,789,789,907,907,907,907,907, /* block 100 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,781,781, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,781, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,789, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,789, /* block 101 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 102 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 103 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,912,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,916,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 104 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 105 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,196,196,196, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,196,196,196,196,196,196,196,196,196, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,915,915,915,915,915,915,916,917, - -/* block 106 */ -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +915,915,915,915,915,915,915,915,915,915,915,915,915,196,196,196, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,196,196,196,196,196,196,196,196,196, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,919,919,919,919,919,919,920,921, + +/* block 106 */ +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, /* block 107 */ -918,918,918,918,918,918,918,918,918,918,918,918,919,920,921,921, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -922,922,922,922,922,922,922,922,922,922,918,918,196,196,196,196, +922,922,922,922,922,922,922,922,922,922,922,922,923,924,925,925, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +926,926,926,926,926,926,926,926,926,926,922,922,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -275,276,275,276,275,276,275,276,275,276,923,924,275,276,275,276, +275,276,275,276,275,276,275,276,275,276,927,928,275,276,275,276, 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,275,276,925,281, -283,283,283,926,849,849,849,849,849,849,849,849,927,927,926,928, +275,276,275,276,275,276,275,276,275,276,275,276,275,276,929,281, +283,283,283,930,853,853,853,853,853,853,853,853,931,931,930,932, /* block 108 */ 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,929,929,849,849, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,931,931,931,931,931,931,931,931,931,931, -932,932,933,934,935,935,935,934,196,196,196,196,196,196,196,196, +275,276,275,276,275,276,275,276,275,276,275,276,933,933,853,853, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,935,935,935,935,935,935,935,935,935,935, +936,936,937,938,939,939,939,938,196,196,196,196,196,196,196,196, /* block 109 */ -936,936,936,936,936,936,936,936, 46, 46, 46, 46, 46, 46, 46, 46, +940,940,940,940,940,940,940,940, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,151,151,151,151,151,151,151,151,151, 46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -695, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,937, 65, 66, +783, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,941, 65, 66, /* block 110 */ - 65, 66, 65, 66, 65, 66, 65, 66,151,938,938, 65, 66,939, 70, 93, - 65, 66, 65, 66,940, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,941,942,943,944,941, 70, -945,946,947,948, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66,949,950,951, 65, 66, 65, 66,952, 65, 66,196,196, - 65, 66,196, 70,196, 70, 65, 66, 65, 66, 65, 66,953,196,196,196, + 65, 66, 65, 66, 65, 66, 65, 66,151,942,942, 65, 66,943, 70, 93, + 65, 66, 65, 66,944, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,945,946,947,948,945, 70, +949,950,951,952, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66,953,954,955, 65, 66, 65, 66,956, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,957,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,695,695,695, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, +196,149,783,783,783, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, /* block 111 */ -954,954,955,954,954,954,956,954,954,954,954,955,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,957,957,955,955,957,958,958,958,958,956,196,196,196, -959,959,959,960,960,960,961,961,962,963,196,196,196,196,196,196, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,965,965,966,966,196,196,196,196,196,196,196,196, - -/* block 112 */ -967,967,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +958,958,959,958,958,958,960,958,958,958,958,959,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,961,961,959,959,961,962,962,962,962,960,196,196,196, +963,963,963,964,964,964,965,965,966,967,196,196,196,196,196,196, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,967,967,967,967,967,967,967,967,967,967,967,967, -967,967,967,967,969,970,196,196,196,196,196,196,196,196,971,971, -972,972,972,972,972,972,972,972,972,972,196,196,196,196,196,196, -378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378, -378,973,376,974,376,376,376,376,385,385,385,376,385,376,376,374, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,969,969,970,970,196,196,196,196,196,196,196,196, + +/* block 112 */ +971,971,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,971,971,971,971,971,971,971,971,971,971,971,971, +971,971,971,971,973,974,196,196,196,196,196,196,196,196,975,975, +976,976,976,976,976,976,976,976,976,976,196,196,196,196,196,196, +376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, +376,977,374,978,374,374,374,374,383,383,383,374,383,374,374,372, /* block 113 */ -975,975,975,975,975,975,975,975,975,975,976,976,976,976,976,976, -976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976, -976,976,976,976,976,976,977,977,977,977,977,978,978,978,979,980, -981,981,981,981,981,981,981,981,981,981,981,981,981,981,981,981, -981,981,981,981,981,981,981,982,982,982,982,982,982,982,982,982, -982,982,983,984,196,196,196,196,196,196,196,196,196,196,196,985, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,196,196,196, +979,979,979,979,979,979,979,979,979,979,980,980,980,980,980,980, +980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,980, +980,980,980,980,980,980,981,981,981,981,981,982,982,982,983,984, +985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,985, +985,985,985,985,985,985,985,986,986,986,986,986,986,986,986,986, +986,986,987,988,196,196,196,196,196,196,196,196,196,196,196,989, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,196,196,196, /* block 114 */ -986,986,986,987,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,989,987,987,986,986,986,986,987,987,986,986,987,987, -990,991,991,991,991,991,991,992,993,993,991,991,991,991,196,994, -995,995,995,995,995,995,995,995,995,995,196,196,196,196,991,991, -511,511,511,511,511,521,996,511,511,511,511,511,511,511,511,511, -522,522,522,522,522,522,522,522,522,522,511,511,511,511,511,196, +990,990,990,991,992,992,992,992,992,993,993,993,992,992,992,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,994,991,991,990,990,990,990,991,991,990,990,991,991, +995,996,996,996,996,996,996,997,998,998,996,996,996,996,196,999, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,196,196,996,996, +509,509,509,509,509,519,1001,509,509,509,509,509,509,509,509,509, +520,520,520,520,520,520,520,520,520,520,509,509,509,509,509,196, /* block 115 */ -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,998,998,998,998,998,998,999, -999,998,998,999,999,998,998,196,196,196,196,196,196,196,196,196, -997,997,997,998,997,997,997,997,997,997,997,997,998,999,196,196, -1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,1001,1002,1002,1002, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -996,511,511,511,511,511,511,523,523,523,511,520,521,520,511,511, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1003,1003,1003,1003,1003,1003,1004, +1004,1003,1003,1004,1004,1003,1003,196,196,196,196,196,196,196,196,196, +1002,1002,1002,1003,1002,1002,1002,1002,1002,1002,1002,1002,1003,1004,196,196, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,196,196,1006,1007,1007,1007, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +1001,509,509,509,1008,1008,1008,521,521,521,509,518,519,518,509,509, /* block 116 */ -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1004,1003,1004,1004,1004,1005,1005,1004,1004,1005,1003,1005,1005,1003,1004,1006, -1007,1006,1007,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1003,1003,1008,1009,1010, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1012,1013,1013,1012,1012, -1014,1014,1011,1015,1015,1012,1016,196,196,196,196,196,196,196,196,196, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1010,1009,1010,1010,1010,1011,1011,1010,1010,1011,1009,1011,1011,1009,1010,1012, +1013,1012,1013,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1009,1009,1014,1015,1016, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1018,1019,1019,1018,1018, +1020,1020,1021,1022,1022,1018,1023,196,196,196,196,196,196,196,196,196, /* block 117 */ -196,533,533,533,533,533,533,196,196,533,533,533,533,533,533,196, -196,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +196,531,531,531,531,531,531,196,196,531,531,531,531,531,531,196, +196,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70,1017, 70, 70, 70, 70, 70, 70, 70,938,149,149,149,149, + 70, 70, 70,1024, 70, 70, 70, 70, 70, 70, 70,942,149,149,149,149, 70, 70, 70, 70, 70,256, 70, 70, 70,149, 46, 46,196,196,196,196, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, /* block 118 */ -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1012,1012,1013,1012,1012,1013,1012,1012,1014,1019,1016,196,196, -1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,196,196,196,196,196,196, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1021,1021,1021,1021,1021, +1021,1021,1021,1018,1018,1019,1018,1018,1019,1018,1018,1020,1026,1023,196,196, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,196,196,196,196,196,196, /* block 119 */ -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 120 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, /* block 121 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 122 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, /* block 123 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 124 */ -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 125 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 126 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,196,196,196,196,196,196,196,196,196,196,196,196, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,196,196,196,196,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,196,196,196,196, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,196,196,196,196,196,196,196,196,196,196,196,196, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,196,196,196,196,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,196,196,196,196, /* block 127 */ -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, /* block 128 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, /* block 129 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 130 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910,910, -1025,910,1025,910,910,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910, -1025,910,1025,910,910,1025,1025,910,910,910,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,914, +1032,914,1032,914,914,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914, +1032,914,1032,914,914,1032,1032,914,914,914,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 131 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,196,196,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 132 */ -703,703,703,703,703,1026,1027,196,196,196,196,196,196,196,196,196, -196,196,196,292,292,292,292,292,196,196,196,196,196,305,300,305, -305,305,305,305,305,305,305,305,305,1028,305,305,305,305,305,305, -305,305,305,305,305,305,305,297,305,305,305,305,305,297,305,297, -305,305,297,305,305,297,305,305,305,305,305,305,305,305,305,305, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +709,709,709,709,709,1033,1034,196,196,196,196,196,196,196,196,196, +196,196,196,292,292,292,292,292,196,196,196,196,196,303,299,303, +303,303,303,303,303,303,303,303,303,1035,303,303,303,303,303,303, +303,303,303,303,303,303,303,297,303,303,303,303,303,297,303,297, +303,303,297,303,303,297,303,303,303,303,303,303,303,303,303,303, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 133 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,313,313,313,313,313,313,313,313,313,313,313,313,313, +313,313,313,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 134 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1029,1029, -1029,1029,1029,1029,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1036,1036, +1036,1036,1036,1036,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 135 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 136 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1030,1031, -315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1037,1038, +313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 137 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -340,340,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,340,340,340,340,340,340,340,315, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -321,321,1033,321,321,321,321,321,321,321,1029,1029,312,1034,315,315, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,313,313,313,313,313,313,313,313, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +319,319,1040,319,319,319,319,319,319,319,1036,1036,310,1041,313,313, /* block 138 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1036, -1037,1037,1038,1039,1037,1038,1038,1040,1041,1037,196,196,196,196,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,927,927, -1037,1042,1042,755,755,1040,1041,1040,1041,1040,1041,1040,1041,1040,1041,1040, -1041,1043,1044,1043,1044,866,866,1040,1041,1037,1037,1037,1037,755,755,755, -1045,199,1046,196,199,1047,1038,1038,1042,1048,1049,1048,1049,1048,1049,1050, -1037,1051,1052,1053,1054,1054,794,196,1051,479,1050,1037,196,196,196,196, -1029,321,1029,321,1029,340,1029,321,1029,321,1029,321,1029,321,1029,321, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1043, +1044,1044,1045,1046,1044,1045,1045,1047,1048,1044,196,196,196,196,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,931,931, +1044,1049,1049,761,761,1047,1048,1047,1048,1047,1048,1047,1048,1047,1048,1047, +1048,1050,1051,1050,1051,870,870,1047,1048,1044,1044,1044,1044,761,761,761, +1052,199,1053,196,199,1054,1045,1045,1049,1055,1056,1055,1056,1055,1056,1057, +1044,1058,1059,1060,1061,1061,802,196,1058,477,1057,1044,196,196,196,196, +1036,319,1036,319,1036,338,1036,319,1036,319,1036,319,1036,319,1036,319, /* block 139 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,340,340, 51, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,338,338, 51, /* block 140 */ -196,1038,1055,1050,479,1050,1037,1056,1048,1049,1037,1052,1045,1057,1046,1058, -1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1047,199,1054,794,1054,1038, -1037,1060,1060,1060,1060,1060,1060, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1048,1051,1049,1061,755, - 46,1062,1062,1062,1062,1062,1062, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1048,794,1049,794,1048, -1049,1063,1064,1065,1066,897,896,896,896,896,896,896,896,896,896,896, -898,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +196,1045,1062,1057,477,1057,1044,1063,1055,1056,1044,1059,1052,1064,1053,1065, +1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1054,199,1061,802,1061,1045, +1044,1067,1067,1067,1067,1067,1067, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1055,1058,1056,1068,761, + 46,1069,1069,1069,1069,1069,1069, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1055,802,1056,802,1055, +1056,1070,1071,1072,1073,901,900,900,900,900,900,900,900,900,900,900, +902,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, /* block 141 */ -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,1067,1067, -902,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -196,196,901,901,901,901,901,901,196,196,901,901,901,901,901,901, -196,196,901,901,901,901,901,901,196,196,901,901,901,196,196,196, -479,479,794, 46,781,479,479,196,781,794,794,794,794,781,781,196, -765,765,765,765,765,765,765,765,765,1068,1068,1068,781,781,1032,1032, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,1074,1074, +906,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +196,196,905,905,905,905,905,905,196,196,905,905,905,905,905,905, +196,196,905,905,905,905,905,905,196,196,905,905,905,196,196,196, +477,477,802, 46,789,477,477,196,789,802,802,802,802,789,789,196, +771,771,771,771,771,771,771,771,771,1075,1075,1075,789,789,1039,1039, /* block 142 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,196,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,196,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 143 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,196,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,196,196,196, /* block 144 */ -1070,1071,1072,196,196,196,196,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,196,196,196,1074,1074,1074,1074,1074,1074,1074,1074,1074, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1076,1076,1076,1076,1077,1077,1077,1077,1077,1077,1077, +1077,1078,1079,196,196,196,196,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,196,196,196,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1083,1083,1083,1083,1084,1084,1084,1084,1084,1084,1084, /* block 145 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1076,1076,1077,1078,1078,196, -781,781,781,781,781,781,781,781,781,781,781,781,781,196,196,196, -1077,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1083,1083,1084,1085,1085,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,196,196,196, +1084,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,189,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,189,196,196, /* block 146 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4115,97 +4143,97 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 147 */ -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079, -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,196,196,196, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1081,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, -1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,196,196,196,196, - -/* block 148 */ -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1084,1084,1084,1084,196,196,196,196,196,196,196,196,196,1083,1083,1083, -1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085, -1085,1086,1085,1085,1085,1085,1085,1085,1085,1085,1086,196,196,196,196,196, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,196,196,196, +1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, -1087,1087,1087,1087,1087,1087,1088,1088,1088,1088,1088,196,196,196,196,196, +1087,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1088,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, +1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,196,196,196, + +/* block 148 */ +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1091,1091,1091,1091,196,196,196,196,196,196,196,196,196,1090,1090,1090, +1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092, +1092,1093,1092,1092,1092,1092,1092,1092,1092,1092,1093,196,196,196,196,196, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,196,196,196,196,196, /* block 149 */ -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,1090, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,196,196,196,196,1091,1091,1091,1091,1091,1091,1091,1091, -1092,1093,1093,1093,1093,1093,196,196,196,196,196,196,196,196,196,196, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,196,1097, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,196,196,196,196,1098,1098,1098,1098,1098,1098,1098,1098, +1099,1100,1100,1100,1100,1100,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 150 */ -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, - -/* block 151 */ -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097, -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,196,196, -1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,196,196,196,196,196,196, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,196,196,196,196,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,196,196,196,196, - -/* block 152 */ 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, -1101,1101,1101,1101,1101,1101,1101,1101,196,196,196,196,196,196,196,196, +1101,1101,1101,1101,1101,1101,1101,1101,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,196,196,196,196,196,196,196,196,196,196,196,1103, -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, -/* block 153 */ -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, -1104,1104,1104,196,1104,1104,196,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,196,1105,1105,196,196,196, -1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, +/* block 151 */ +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104, +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,196, +1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,196,196,196,196,196,196, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, -1106,1106,1106,1106,196,196,196,196,196,196,196,196,196,196,196,196, +1106,1106,1106,1106,196,196,196,196,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196, + +/* block 152 */ +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,196,196,196,196,196,196,196,196, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,196,196,196,196,196,196,196,196,196,196,196,1110, +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, + +/* block 153 */ +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, +1111,1111,1111,196,1111,1111,196,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,196,1112,1112,196,196,196, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,196,196,196,196,196,196,196,196,196,196,196,196, /* block 154 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, /* block 155 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 156 */ -149,1108,1108,149,149,149,196,149,149,149,149,149,149,149,149,149, +149,1115,1115,149,149,149,196,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,196,149,149,149,149,149,149,149,149,149,196,196,196,196,196, @@ -4215,79 +4243,79 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 157 */ -1109,1109,1109,1109,1109,1109,297,297,1109,297,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,297,1109,1109,297,297,297,1109,297,297,1109, -1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110, -1110,1110,1110,1110,1110,1110,297,1111,1112,1112,1112,1112,1112,1112,1112,1112, -1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, -1113,1113,1113,1113,1113,1113,1113,1114,1114,1115,1115,1115,1115,1115,1115,1115, +1116,1116,1116,1116,1116,1116,297,297,1116,297,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,297,1116,1116,297,297,297,1116,297,297,1116, +1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1117,1117,1117,1117,1117,1117,297,1118,1119,1119,1119,1119,1119,1119,1119,1119, +1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, +1120,1120,1120,1120,1120,1120,1120,1121,1121,1122,1122,1122,1122,1122,1122,1122, /* block 158 */ -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,297, -297,297,297,297,297,297,297,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297, +297,297,297,297,297,297,297,1124,1124,1124,1124,1124,1124,1124,1124,1124, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118, -1118,1118,1118,297,1118,1118,297,297,297,297,297,1119,1119,1119,1119,1119, +1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, +1125,1125,1125,297,1125,1125,297,297,297,297,297,1126,1126,1126,1126,1126, /* block 159 */ -1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, -1120,1120,1120,1120,1120,1120,1121,1121,1121,1121,1121,1121,297,297,297,1122, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,297,297,297,297,1124, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1127,1127,1127,1127,1127,1127,1128,1128,1128,1128,1128,1128,297,297,297,1129, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,297,297,297,297,297,1131, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 160 */ -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126, -1126,1126,1126,1126,1126,1126,1126,1126,297,297,297,297,1127,1127,1126,1126, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -297,297,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134, +1134,1134,1134,1134,1134,1134,1134,1134,297,297,297,297,1135,1135,1134,1134, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +297,297,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, /* block 161 */ -1128,1129,1129,1129,297,1129,1129,297,297,297,297,297,1129,1129,1129,1129, -1128,1128,1128,1128,297,1128,1128,1128,297,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,297,297,1130,1130,1130,297,297,297,297,1131, -1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,297, -1133,1133,1133,1133,1133,1133,1134,1134,1133,297,297,297,297,297,297,297, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1136,1136,1137, +1136,1137,1137,1137,297,1137,1137,297,297,297,297,297,1137,1137,1137,1137, +1136,1136,1136,1136,297,1136,1136,1136,297,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,297,297,1138,1138,1138,297,297,297,297,1139, +1140,1140,1140,1140,1140,1140,1140,1140,1140,297,297,297,297,297,297,297, +1141,1141,1141,1141,1141,1141,1142,1142,1141,297,297,297,297,297,297,297, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1144,1144,1145, /* block 162 */ -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138, -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1139,1139,1139, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1140,1140,1140,1140,1140,1140,1140,1140,1141,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1142,1142,297,297,297,297,1143,1143,1143,1143,1143, -1144,1144,1145,1144,1144,1144,1146,297,297,297,297,297,297,297,297,297, +1148,1148,1148,1148,1148,1148,1148,1148,1149,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1150,1150,297,297,297,297,1151,1151,1151,1151,1151, +1152,1152,1153,1152,1152,1152,1154,297,297,297,297,297,297,297,297,297, /* block 163 */ -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,297,297,297,1148,1149,1149,1149,1149,1149,1149, -1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150, -1150,1150,1150,1150,1150,1150,297,297,1151,1151,1151,1151,1151,1151,1151,1151, -1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152, -1152,1152,1152,297,297,297,297,297,1153,1153,1153,1153,1153,1153,1153,1153, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,297,297,297,1156,1157,1157,1157,1157,1157,1157, +1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, +1158,1158,1158,1158,1158,1158,297,297,1159,1159,1159,1159,1159,1159,1159,1159, +1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160, +1160,1160,1160,297,297,297,297,297,1161,1161,1161,1161,1161,1161,1161,1161, /* block 164 */ -1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154, -1154,1154,297,297,297,297,297,297,297,1155,1155,1155,1155,297,297,297, -297,297,297,297,297,297,297,297,297,1156,1156,1156,1156,1156,1156,1156, +1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162, +1162,1162,297,297,297,297,297,297,297,1163,1163,1163,1163,297,297,297, +297,297,297,297,297,297,297,297,297,1164,1164,1164,1164,1164,1164,1164, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4295,37 +4323,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 165 */ -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,297,297,297,297,297,297,297, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 166 */ -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,297,297,297,297,297,297,297,297,297,297,297,297,297, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,297,297,297,297,297,297,297,1160,1160,1160,1160,1160,1160, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,297,297,297,297,297,297,297,297,297,297,297,297,297, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,297,297,297,297,297,297,297,1168,1168,1168,1168,1168,1168, /* block 167 */ -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1162,1162,1163,1163,1163,1163,340,340,340,340,340,340,340,340, -1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,340,340,340,340,340,340, -1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1166,1166,1166,1166,1167,1166, -1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168, -1168,1168,1168,1168,1168,1168,297,297,297,1169,1170,1171,1171,1171,1172,1173, -1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1170,1170,1171,1171,1171,1171,338,338,338,338,338,338,338,338, +1172,1172,1172,1172,1172,1172,1172,1172,1172,1172,338,338,338,338,338,338, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1174,1174,1174,1174,1175,1174, +1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, +1176,1176,1176,1176,1176,1176,297,297,297,1177,1178,1179,1179,1179,1180,1181, +1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, /* block 168 */ -1174,1174,1174,1174,1174,1174,297,297,297,297,297,297,297,297,1175,1175, +1182,1182,1182,1182,1182,1182,297,297,297,297,297,297,297,297,1183,1183, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4341,184 +4369,184 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,297, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,297, /* block 170 */ -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,297,1178,1178,1179,297,297, -1177,1177,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,340,321,321,321,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,316,333,333,333, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,297,1186,1186,1187,297,297, +1185,1185,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +338,338,319,319,319,1188,319,319,338,338,338,338,338,338,338,338, +1189,313,313,313,313,313,313,313,313,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,324,314,314,331,331,331, /* block 171 */ -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180, -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1181,1181,1181, -1181,1181,1181,1181,1181,1181,1181,1180,297,297,297,297,297,297,297,297, -1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, -1182,1182,1182,1182,1182,1182,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, -1183,1184,1184,1184,1184,1185,1185,1185,1185,1185,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1191,1191,1191, +1191,1191,1191,1191,1191,1191,1191,1190,297,297,297,297,297,297,297,297, +1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192, +1192,1192,1192,1192,1192,1192,1193,1193,1193,1193,1193,1193,1193,1193,1193,1193, +1193,1194,1194,1194,1194,1195,1195,1195,1195,1195,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196, /* block 172 */ -1186,1186,1187,1187,1187,1187,1188,1188,1188,1188,297,297,297,297,297,297, +1196,1196,1197,1197,1197,1197,1198,1198,1198,1198,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189, -1189,1189,1189,1189,1189,1190,1190,1190,1190,1190,1190,1190,297,297,297,297, +1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, +1199,1199,1199,1199,1199,1200,1200,1200,1200,1200,1200,1200,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191, -1191,1191,1191,1191,1191,1191,1191,297,297,297,297,297,297,297,297,297, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1201,1201,1201,1201,1201,1201,1201,297,297,297,297,297,297,297,297,297, /* block 173 */ -1192,1193,1192,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1193,1193,1193,1193,1193,1193,1193,1193, -1193,1193,1193,1193,1193,1193,1195,1196,1196,1197,1197,1197,1197,1197,196,196, -196,196,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198, -1198,1198,1198,1198,1198,1198,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, -1195,1194,1194,1193,1193,1194,196,196,196,196,196,196,196,196,196,1200, +1202,1203,1202,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1203,1203,1203,1203,1203,1203,1203,1203, +1203,1203,1203,1203,1203,1203,1205,1206,1206,1207,1207,1207,1207,1207,196,196, +196,196,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208, +1208,1208,1208,1208,1208,1208,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, +1205,1204,1204,1203,1203,1204,196,196,196,196,196,196,196,196,196,1210, /* block 174 */ -1201,1201,1202,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1202,1202,1202,1201,1201,1201,1201,1202,1202,1204,1205,1206,1206,1207,1208,1208, -1208,1208,1201,196,196,196,196,196,196,196,196,196,196,1207,196,196, -1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, -1209,1209,1209,1209,1209,1209,1209,1209,1209,196,196,196,196,196,196,196, -1210,1210,1210,1210,1210,1210,1210,1210,1210,1210,196,196,196,196,196,196, +1211,1211,1212,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1212,1212,1212,1211,1211,1211,1211,1212,1212,1214,1215,1216,1216,1217,1218,1218, +1218,1218,1211,196,196,196,196,196,196,196,196,196,196,1217,196,196, +1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219, +1219,1219,1219,1219,1219,1219,1219,1219,1219,196,196,196,196,196,196,196, +1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,196,196,196,196,196,196, /* block 175 */ -1211,1211,1211,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1211,1211,1211,1211,1211,1213,1211,1211,1211, -1211,1211,1211,1214,1214,196,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215, -1216,1217,1217,1217,1212,1213,1213,1212,196,196,196,196,196,196,196,196, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1219,1220,1220,1218,196,196,196,196,196,196,196,196,196, +1221,1221,1221,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1221,1221,1221,1221,1221,1223,1221,1221,1221, +1221,1221,1221,1224,1224,196,1225,1225,1225,1225,1225,1225,1225,1225,1225,1225, +1226,1227,1227,1227,1222,1223,1223,1222,196,196,196,196,196,196,196,196, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1229,1230,1230,1228,196,196,196,196,196,196,196,196,196, /* block 176 */ -1221,1221,1222,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1222,1222,1222,1221,1221,1221,1221,1221,1221,1221,1221,1221,1222, -1224,1223,1225,1225,1223,1226,1226,1227,1227,1228,1229,1229,1229,1226,1222,1221, -1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1223,1227,1223,1227,1226,1226, -196,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231, -1231,1231,1231,1231,1231,196,196,196,196,196,196,196,196,196,196,196, +1231,1231,1232,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1232,1232,1232,1231,1231,1231,1231,1231,1231,1231,1231,1231,1232, +1234,1233,1235,1235,1233,1236,1236,1237,1237,1238,1239,1239,1239,1236,1232,1231, +1240,1240,1240,1240,1240,1240,1240,1240,1240,1240,1233,1237,1233,1237,1236,1236, +196,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241, +1241,1241,1241,1241,1241,196,196,196,196,196,196,196,196,196,196,196, /* block 177 */ -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,196,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1233,1233,1233,1234, -1234,1234,1233,1233,1234,1235,1236,1237,1238,1238,1239,1238,1238,1240,1234,1232, -1232,1234,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,196,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1243,1243,1243,1244, +1244,1244,1243,1243,1244,1245,1246,1247,1248,1248,1249,1248,1248,1250,1244,1242, +1242,1244,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 178 */ -1241,1241,1241,1241,1241,1241,1241,196,1241,196,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1242,196,196,196,196,196,196, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1244, -1245,1245,1245,1244,1244,1244,1244,1244,1244,1246,1247,196,196,196,196,196, -1248,1248,1248,1248,1248,1248,1248,1248,1248,1248,196,196,196,196,196,196, +1251,1251,1251,1251,1251,1251,1251,196,1251,196,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1252,196,196,196,196,196,196, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1254, +1255,1255,1255,1254,1254,1254,1254,1254,1254,1256,1257,196,196,196,196,196, +1258,1258,1258,1258,1258,1258,1258,1258,1258,1258,196,196,196,196,196,196, /* block 179 */ -1249,1250,1251,1252,196,1253,1253,1253,1253,1253,1253,1253,1253,196,196,1253, -1253,196,196,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, -1253,1253,1253,1253,1253,1253,1253,1253,1253,196,1253,1253,1253,1253,1253,1253, -1253,196,1253,1253,196,1253,1253,1253,1253,1253,196,1254,1255,1253,1256,1251, -1249,1251,1251,1251,1251,196,196,1251,1251,196,196,1251,1251,1257,196,196, -1253,196,196,196,196,196,196,1256,196,196,196,196,196,1258,1253,1253, -1253,1253,1251,1251,196,196,1259,1259,1259,1259,1259,1259,1259,196,196,196, -1259,1259,1259,1259,1259,196,196,196,196,196,196,196,196,196,196,196, +1259,1260,1261,1262,196,1263,1263,1263,1263,1263,1263,1263,1263,196,196,1263, +1263,196,196,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263, +1263,1263,1263,1263,1263,1263,1263,1263,1263,196,1263,1263,1263,1263,1263,1263, +1263,196,1263,1263,196,1263,1263,1263,1263,1263,196,1264,1265,1263,1266,1261, +1259,1261,1261,1261,1261,196,196,1261,1261,196,196,1261,1261,1267,196,196, +1263,196,196,196,196,196,196,1266,196,196,196,196,196,1268,1263,1263, +1263,1263,1261,1261,196,196,1269,1269,1269,1269,1269,1269,1269,196,196,196, +1269,1269,1269,1269,1269,196,196,196,196,196,196,196,196,196,196,196, /* block 180 */ -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,196,1260,196,196,1260,196, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,196,1260,1261,1262,1262,1263,1263,1263,1263,1263, -1263,196,1261,196,196,1261,196,1261,1261,1261,1262,196,1262,1262,1264,1265, -1264,1266,1267,1268,1269,1269,196,1270,1270,196,196,196,196,196,196,196, -196,1271,1271,196,196,196,196,196,196,196,196,196,196,196,196,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,196,1270,196,196,1270,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,196,1271,1272,1273,1273,1274,1274,1274,1274,1274, +1274,196,1272,196,196,1272,196,1272,1272,1272,1273,196,1273,1273,1275,1276, +1275,1277,1278,1279,1280,1280,196,1281,1281,196,196,196,196,196,196,196, +196,1282,1282,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 181 */ -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1273,1273,1273,1274,1274,1274,1274,1274,1274,1274,1274, -1273,1273,1275,1274,1274,1273,1276,1272,1272,1272,1272,1277,1277,1278,1279,1279, -1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1278,1278,196,1279,1281,1272, -1272,1272,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1284,1284,1284,1285,1285,1285,1285,1285,1285,1285,1285, +1284,1284,1286,1285,1285,1284,1287,1283,1283,1283,1283,1288,1288,1289,1290,1290, +1291,1291,1291,1291,1291,1291,1291,1291,1291,1291,1289,1289,196,1290,1292,1283, +1283,1283,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 182 */ -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1283,1284,1284,1285,1285,1285,1285,1285,1285,1284,1285,1284,1284,1283,1284,1285, -1285,1284,1286,1287,1282,1282,1288,1282,196,196,196,196,196,196,196,196, -1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,196,196,196,196,196,196, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1294,1295,1295,1296,1296,1296,1296,1296,1296,1295,1296,1295,1295,1294,1295,1296, +1296,1295,1297,1298,1293,1293,1299,1293,196,196,196,196,196,196,196,196, +1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 183 */ -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1291, -1292,1292,1293,1293,1293,1293,196,196,1292,1292,1292,1292,1293,1293,1292,1294, -1295,1296,1297,1297,1298,1298,1299,1299,1299,1297,1297,1297,1297,1297,1297,1297, -1297,1297,1297,1297,1297,1297,1297,1297,1290,1290,1290,1290,1293,1293,196,196, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1302, +1303,1303,1304,1304,1304,1304,196,196,1303,1303,1303,1303,1304,1304,1303,1305, +1306,1307,1308,1308,1309,1309,1310,1310,1310,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1301,1301,1301,1301,1304,1304,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 184 */ -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1301,1301,1301,1302,1302,1302,1302,1302,1302,1302,1302,1301,1301,1302,1301,1303, -1302,1304,1304,1305,1300,196,196,196,196,196,196,196,196,196,196,196, -1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,196,196,196,196,196,196, -581,581,581,581,581,581,581,581,581,581,581,581,581,196,196,196, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1312,1312,1312,1313,1313,1313,1313,1313,1313,1313,1313,1312,1312,1313,1312,1314, +1313,1315,1315,1316,1311,196,196,196,196,196,196,196,196,196,196,196, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,196,196,196,196,196,196, +580,580,580,580,580,580,580,580,580,580,580,580,580,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 185 */ -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1308,1309,1308,1309,1309, -1308,1308,1308,1308,1308,1308,1310,1311,1307,1312,196,196,196,196,196,196, -1313,1313,1313,1313,1313,1313,1313,1313,1313,1313,196,196,196,196,196,196, -522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, -522,522,522,522,196,196,196,196,196,196,196,196,196,196,196,196, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1319,1320,1319,1320,1320, +1319,1319,1319,1319,1319,1319,1321,1322,1318,1323,196,196,196,196,196,196, +1324,1324,1324,1324,1324,1324,1324,1324,1324,1324,196,196,196,196,196,196, +520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520, +520,520,520,520,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 186 */ -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314, -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,196,196,1315,1316,1315, -1317,1317,1315,1315,1315,1315,1316,1315,1315,1315,1315,1318,196,196,196,196, -1319,1319,1319,1319,1319,1319,1319,1319,1319,1319,1320,1320,1321,1321,1321,1322, -1314,1314,1314,1314,1314,1314,1314,196,196,196,196,196,196,196,196,196, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,196,196,1326,1327,1326, +1328,1328,1326,1326,1326,1326,1327,1326,1326,1326,1326,1329,196,196,196,196, +1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1331,1331,1332,1332,1332,1333, +1325,1325,1325,1325,1325,1325,1325,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 187 */ -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1324,1324,1324,1325, -1325,1325,1325,1325,1325,1325,1325,1325,1324,1326,1327,1328,196,196,196,196, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1335,1335,1335,1336, +1336,1336,1336,1336,1336,1336,1336,1336,1335,1337,1338,1339,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4527,61 +4555,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 188 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1331,1331,1331,1331,1331,1331,1331,1331,1331,1331,1332,1332,1332,1332,1332,1332, -1332,1332,1332,196,196,196,196,196,196,196,196,196,196,196,196,1333, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1342,1342,1342,1342,1342,1342,1342,1342,1342,1342,1343,1343,1343,1343,1343,1343, +1343,1343,1343,196,196,196,196,196,196,196,196,196,196,196,196,1344, /* block 189 */ -1334,1334,1334,1334,1334,1334,1334,196,196,1334,196,196,1334,1334,1334,1334, -1334,1334,1334,1334,196,1334,1334,196,1334,1334,1334,1334,1334,1334,1334,1334, -1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, -1335,1336,1336,1336,1336,1336,196,1336,1336,196,196,1337,1337,1338,1339,1340, -1336,1340,1336,1341,1342,1343,1342,196,196,196,196,196,196,196,196,196, -1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,196,196,196,196,196,196, +1345,1345,1345,1345,1345,1345,1345,196,196,1345,196,196,1345,1345,1345,1345, +1345,1345,1345,1345,196,1345,1345,196,1345,1345,1345,1345,1345,1345,1345,1345, +1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, +1346,1347,1347,1347,1347,1347,196,1347,1347,196,196,1348,1348,1349,1350,1351, +1347,1351,1347,1352,1353,1354,1353,196,196,196,196,196,196,196,196,196, +1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 190 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1345,1345,1345,1345,1345,1345,1345,1345,196,196,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1346,1346,1346,1347,1347,1347,1347,196,196,1347,1347,1346,1346,1346,1346, -1348,1345,1349,1345,1346,196,196,196,196,196,196,196,196,196,196,196, +1356,1356,1356,1356,1356,1356,1356,1356,196,196,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1357,1357,1357,1358,1358,1358,1358,196,196,1358,1358,1357,1357,1357,1357, +1359,1356,1360,1356,1357,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 191 */ -1350,1351,1351,1351,1351,1351,1351,1352,1352,1351,1351,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1353,1354,1351,1351,1351,1351,1355,1356,1351,1351,1351,1351,1357, -1357,1357,1358,1358,1357,1357,1357,1354,196,196,196,196,196,196,196,196, -1359,1360,1360,1360,1360,1360,1360,1361,1361,1360,1360,1360,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, +1361,1362,1362,1362,1362,1362,1362,1363,1363,1362,1362,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1364,1365,1362,1362,1362,1362,1366,1367,1362,1362,1362,1362,1368, +1368,1368,1369,1369,1368,1368,1368,1365,196,196,196,196,196,196,196,196, +1370,1371,1371,1371,1371,1371,1371,1372,1372,1371,1371,1371,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, /* block 192 */ -1359,1359,1359,1359,1362,1362,1362,1362,1362,1362,1360,1360,1360,1360,1360,1360, -1360,1360,1360,1360,1360,1360,1360,1361,1363,1364,1365,1366,1366,1359,1365,1365, -1365,1367,1367,196,196,196,196,196,196,196,196,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,196,196,196,196,196,196,196, +1370,1370,1370,1370,1373,1373,1373,1373,1373,1373,1371,1371,1371,1371,1371,1371, +1371,1371,1371,1371,1371,1371,1371,1372,1374,1375,1376,1377,1377,1378,1376,1376, +1376,1379,1379,196,196,196,196,196,196,196,196,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,196,196,196,196, /* block 193 */ -385,385,385,385,385,385,385,385,385,385,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +383,383,383,383,383,383,383,383,383,383,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1231,1232,1231,1231,1231,1232,1231,1232,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 194 */ @@ -4589,49 +4617,49 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1370,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1371,1371,1371,1371,1371,1371,1371,1371,1371,1371,196,196,196,196,196,196, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1382,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,196,196,196,196,196,196, /* block 195 */ -1372,1372,1372,1372,1372,1372,1372,1372,1372,196,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1373, -1374,1374,1374,1374,1374,1374,1374,196,1374,1374,1374,1374,1374,1374,1373,1375, -1372,1376,1376,1377,1378,1378,196,196,196,196,196,196,196,196,196,196, -1379,1379,1379,1379,1379,1379,1379,1379,1379,1379,1380,1380,1380,1380,1380,1380, -1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196, -1381,1382,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, +1384,1384,1384,1384,1384,1384,1384,1384,1384,196,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1385, +1386,1386,1386,1386,1386,1386,1386,196,1386,1386,1386,1386,1386,1386,1385,1387, +1384,1388,1388,1389,1390,1390,196,196,196,196,196,196,196,196,196,196, +1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,1392,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,196,196,196, +1393,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 196 */ -1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, -196,196,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, -1384,1384,1384,1384,1384,1384,1384,1384,196,1385,1384,1384,1384,1384,1384,1384, -1384,1385,1384,1384,1385,1384,1384,196,196,196,196,196,196,196,196,196, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +196,196,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396, +1396,1396,1396,1396,1396,1396,1396,1396,196,1397,1396,1396,1396,1396,1396,1396, +1396,1397,1396,1396,1397,1396,1396,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 197 */ -1386,1386,1386,1386,1386,1386,1386,196,1386,1386,196,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1387,1387,1387,1387,1387,1387,196,196,196,1387,196,1387,1387,196,1387, -1387,1387,1388,1387,1389,1389,1390,1387,196,196,196,196,196,196,196,196, -1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,196,196,196,196,196,196, -1392,1392,1392,1392,1392,1392,196,1392,1392,196,1392,1392,1392,1392,1392,1392, -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392, +1398,1398,1398,1398,1398,1398,1398,196,1398,1398,196,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1399,1399,1399,1399,1399,1399,196,196,196,1399,196,1399,1399,196,1399, +1399,1399,1400,1399,1401,1401,1402,1399,196,196,196,196,196,196,196,196, +1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,196,1404,1404,196,1404,1404,1404,1404,1404,1404, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, /* block 198 */ -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1393,1393,1393,1393,1393,196, -1394,1394,196,1393,1393,1394,1393,1395,1392,196,196,196,196,196,196,196, -1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1405,1405,1405,1405,1405,196, +1406,1406,196,1405,1405,1406,1405,1407,1404,196,196,196,196,196,196,196, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,196,196,196,196,196,196, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,1409,1409,196,196,196,196, +1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 199 */ @@ -4641,16 +4669,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397, -1397,1397,1397,1398,1398,1399,1399,1400,1400,196,196,196,196,196,196,196, +1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412, +1412,1412,1412,1413,1413,1414,1414,1415,1415,196,196,196,196,196,196,196, /* block 200 */ -1401,1401,1402,1403,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,196,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1403,1403,1401,1401,1401,1401,1401,196,196,196,1403,1403, -1401,1405,1406,1407,1407,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, -1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,196,196,196,196,196, +1416,1416,1417,1418,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,196,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1418,1418,1416,1416,1416,1416,1416,196,196,196,1418,1418, +1416,1420,1421,1422,1422,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, +1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4658,25 +4686,25 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411, -435,435,1411,435,1411,437,437,437,437,437,437,437,437,438,438,438, -438,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, -437,437,196,196,196,196,196,196,196,196,196,196,196,196,196,1412, +918,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426, +433,433,1426,433,1426,435,435,435,435,435,435,435,435,436,436,436, +436,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435, +435,435,196,196,196,196,196,196,196,196,196,196,196,196,196,1427, /* block 202 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, /* block 203 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4685,137 +4713,137 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 204 */ -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,196, -1415,1415,1415,1415,1415,196,196,196,196,196,196,196,196,196,196,196, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196, +1430,1430,1430,1430,1430,196,196,196,196,196,196,196,196,196,196,196, /* block 205 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,196,196,196,196,196,196,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 206 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1417,1417,196,196,196,196,196,196,196,196,196,196,196,196,196, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1432,1432,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 207 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 208 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, -1420,1418,1418,1418,1418,1418,1418,1421,1421,1421,1421,1421,1421,1421,1421,1421, -1421,1421,1421,1421,1421,1421,196,196,196,196,196,196,196,196,196,196, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434, +1435,1433,1433,1433,1433,1433,1433,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1436,1436,1436,1436,1436,1436,196,196,196,196,196,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 209 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,196,196,196, /* block 210 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, /* block 211 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,196,196,196,196,196,196,196,196,196, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 212 */ -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1424,1424, -1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,1425,1425,1424,1424,1426, -1427,1427,1427,1427,1427,1427,1427,1427,1427,1427,196,196,196,196,196,196, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1439,1439, +1439,1439,1439,1439,1439,1439,1439,1439,1439,1439,1440,1440,1440,1439,1439,1441, +1442,1442,1442,1442,1442,1442,1442,1442,1442,1442,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 213 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, /* block 214 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,196,196,196,196,196,196,196, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196, -1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,196,196,196,1430,1430, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,196,196,196,196,196,196,196, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,196, +1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,196,196,196,1445,1445, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, /* block 215 */ -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,196, -1432,1432,1432,1432,1432,1432,1432,1432,1432,1432,196,196,196,196,196,196, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196, -1434,1434,1434,1434,1434,1435,196,196,196,196,196,196,196,196,196,196, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,196, +1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,196,196,196,196,196,196, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,196,196, +1449,1449,1449,1449,1449,1450,196,196,196,196,196,196,196,196,196,196, /* block 216 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1437,1437,1437,1437,1437,1437,1437,1438,1438,1439,1440,1440,1441,1441,1441,1441, -1442,1442,1443,1443,1438,1441,196,196,196,196,196,196,196,196,196,196, -1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,1445,1445,1445,1445,1445, -1445,1445,196,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,196,196,196,196,196,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1452,1452,1452,1452,1452,1452,1452,1453,1453,1454,1455,1455,1456,1456,1456,1456, +1457,1457,1458,1458,1453,1456,196,196,196,196,196,196,196,196,196,196, +1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,1460,1460,1460,1460,1460, +1460,1460,196,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,196,196,196,196,196,1451,1451,1451, /* block 217 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4829,94 +4857,84 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1446,1446,1446,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1448,1447,1447,1447,1448,1448,1448,1448,1449,1449,1450,1451,1451, -1452,1452,1452,1452,1452,1452,1452,1452,1452,1452,196,196,196,196,196,196, +1461,1461,1461,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1463,1462,1462,1462,1463,1463,1463,1463,1464,1464,1465,1466,1466, +1467,1467,1467,1467,1467,1467,1467,1467,1467,1467,196,196,196,196,196,196, /* block 219 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, /* block 220 */ -1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455, -1455,1455,1455,1455,1455,1455,1455,1456,1457,1458,1458,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, +1470,1470,1470,1470,1470,1470,1470,1471,1472,1473,1473,196,196,196,196,196, +1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474, +1474,1474,1474,1474,1474,1474,1474,1474,1474,196,196,1475,1475,1475,1475,1475, +1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475, +1475,1475,1475,1475,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 221 */ -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,196,196,196,1460, -1459,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,196,196,196,196,1477, +1476,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, /* block 222 */ -1461,1461,1461,1461,1461,1461,1461,1461,196,196,196,196,196,196,196,1462, -1462,1462,1462,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463, +1478,1478,1478,1478,1478,1478,1478,1478,196,196,196,196,196,196,196,1479, +1479,1479,1479,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1464,1465,1466,867,1467,196,196,196,196,196,196,196,196,196,196,196, -1468,1468,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1481,1482,1483,871,1484,196,196,196,196,196,196,196,196,196,196,196, +1485,1485,1486,1486,873,873,873,196,196,196,196,196,196,196,196,196, /* block 223 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, /* block 224 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, /* block 225 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, - -/* block 226 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,196,196,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1470, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1488, -/* block 227 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 226 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4924,6 +4942,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 227 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,196,196,196,196,196,196,196,196,196,196,196,196,196, + /* block 228 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4932,72 +4960,72 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1471,1471,1471,1471,196,1471,1471,1471,1471,1471,1471,1471,196,1471,1471,196, +1489,1489,1489,1489,196,1489,1489,1489,1489,1489,1489,1489,196,1489,1489,196, /* block 229 */ -896,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +900,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 230 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 231 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -896,896,896,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,891,196,196,196,196,196,196,196,196,196,196,196,196,196, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +900,900,900,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,895,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -891,891,891,196,196,896,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,896,896,896,896,196,196,196,196,196,196,196,196, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +895,895,895,196,196,900,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,900,900,900,900,196,196,196,196,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 232 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 233 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,196,196, /* block 234 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196, /* block 235 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,1474,1475,1476,1477, -1478,1478,1478,1478,196,196,196,196,196,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,1492,1493,1494,1495, +1496,1496,1496,1496,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5005,34 +5033,34 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 236 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 237 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,789,789,196,196,196, /* block 238 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,196,196,196,196,196,196,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +802,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 239 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, @@ -5040,66 +5068,66 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,176,176,176,176,176,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 240 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,196,196,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 241 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 242 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,196,196,196,196,196,196,196,196,196,196, /* block 243 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,196,196,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,1480,1480,176,176,176,510,510,510,1481,1481,1481, -1481,1481,1481, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,196,196,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,1498,1498,176,176,176,508,508,508,1499,1499,1499, +1499,1499,1499, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, /* block 244 */ -176,176,176,510,510,176,176,176,176,176,176,176,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,176,176,176,176,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,781,781,196,196,196,196,196, +176,176,176,508,508,176,176,176,176,176,176,176,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,176,176,176,176,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,789,789,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 245 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1482,1482,1482,1077,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1500,1500,1500,1084,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5109,125 +5137,125 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, /* block 247 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,196,196,196,196,196,196,196,196,196, -904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, -904,904,907,907,907,907,907,907,907,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,196,196,196,196,196,196,196,196,196, +908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908, +908,908,911,911,911,911,911,911,911,196,196,196,196,196,196,196, /* block 248 */ -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,196,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,196,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 249 */ -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,196,782,782, -196,196,782,196,196,782,782,196,196,782,782,782,782,196,782,782, -782,782,782,782,782,782,783,783,783,783,196,783,196,783,795,795, -783,783,783,783,196,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,196,790,790, +196,196,790,196,196,790,790,196,196,790,790,790,790,196,790,790, +790,790,790,790,790,790,791,791,791,791,196,791,196,791,803,803, +791,791,791,791,196,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, /* block 250 */ -783,783,783,783,782,782,196,782,782,782,782,196,196,782,782,782, -782,782,782,782,782,196,782,782,782,782,782,782,782,196,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,196,782,782,782,782,196, -782,782,782,782,782,196,782,196,196,196,782,782,782,782,782,782, -782,196,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,790,790,196,790,790,790,790,196,196,790,790,790, +790,790,790,790,790,196,790,790,790,790,790,790,790,196,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,196,790,790,790,790,196, +790,790,790,790,790,196,790,196,196,196,790,790,790,790,790,790, +790,196,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 251 */ -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, /* block 252 */ -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 253 */ -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,196,196,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,1483,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,1483,783,783,783,783, -783,783,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,1483,783,783,783,783, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,196,196,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,1501,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,1501,791,791,791,791, +791,791,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,1501,791,791,791,791, /* block 254 */ -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,1483,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,1483,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,1483, -783,783,783,783,783,783,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,1483, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,1501,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,1501,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,1501, +791,791,791,791,791,791,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,1501, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, /* block 255 */ -783,783,783,783,783,783,783,783,783,1483,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,1483,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,1483,783,783,783,783,783,783,782,783,196,196,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, +791,791,791,791,791,791,791,791,791,1501,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,1501,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,1501,791,791,791,791,791,791,790,791,196,196,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, /* block 256 */ -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 257 */ -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1485,1485,1485,1485,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1485,1485,1485, -1485,1485,1485,1485,1485,1486,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,1503,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1503,1503,1503, +1503,1503,1503,1503,1503,1504,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 258 */ -1485,1485,1485,1485,1486,1485,1485,1487,1488,1487,1487,1489,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1486,1486,1486,1486,1486, -196,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, +1503,1503,1503,1503,1504,1503,1503,1505,1506,1505,1505,1507,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1504,1504,1504,1504,1504, +196,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5236,7 +5264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 259 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 93, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,196, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,196, 196,196,196,196,196, 70, 70, 70, 70, 70, 70,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5245,17 +5273,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 260 */ -1490,1490,1490,1490,1490,1490,1490,196,1490,1490,1490,1490,1490,1490,1490,1490, -1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,1490,1490,1490,1490,1490, -1490,1490,196,1490,1490,196,1490,1490,1490,1490,1490,196,196,196,196,196, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,1491,1491,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,1491,929,929,929,929,929,196,196, +1508,1508,1508,1508,1508,1508,1508,196,1508,1508,1508,1508,1508,1508,1508,1508, +1508,1508,1508,1508,1508,1508,1508,1508,1508,196,196,1508,1508,1508,1508,1508, +1508,1508,196,1508,1508,196,1508,1508,1508,1508,1508,196,196,196,196,196, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,1509,1509,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,1509,933,933,933,933,933,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 261 */ -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,849, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,853, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5265,24 +5293,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 262 */ -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,196,196,196, -1493,1493,1493,1493,1493,1493,1493,1494,1494,1494,1494,1494,1495,1495,196,196, -1496,1496,1496,1496,1496,1496,1496,1496,1496,1496,196,196,196,196,1492,1497, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,196,196,196, +1511,1511,1511,1511,1511,1511,1511,1512,1512,1512,1512,1512,1513,1513,196,196, +1514,1514,1514,1514,1514,1514,1514,1514,1514,1514,196,196,196,196,1510,1515, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 263 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1499,196, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1517,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1501,1501,1501,1501, -1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,196,196,196,196,196,1503, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1519,1519,1519,1519, +1520,1520,1520,1520,1520,1520,1520,1520,1520,1520,196,196,196,196,196,1521, /* block 264 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5290,9 +5318,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1505,1506,1506,1506,1506, -1507,1507,1507,1507,1507,1507,1507,1507,1507,1507,196,196,196,196,196,196, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1523,1524,1524,1524,1524, +1525,1525,1525,1525,1525,1525,1525,1525,1525,1525,196,196,196,196,196,196, /* block 265 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5300,51 +5328,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1509,1510, -1508,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,196,196,196,196,1512, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1527,1528, +1526,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,196,196,196,196,1530, /* block 266 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,196,533,533,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,196, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,196, +1531,1531,1531,1532,1531,1531,1532,1531,1531,1531,1531,1531,1531,1531,1532,1532, +1531,1531,1531,1531,1531,1532,196,196,196,196,196,196,196,196,1531,1533, /* block 267 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,196,531,531,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,196, /* block 268 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,297,297,1514,1514,1514,1514,1514,1514,1514,1514,1514, -1515,1515,1515,1515,1515,1515,1515,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, /* block 269 */ -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1518,1518,1518,1519,1520,1520,1520,1521,297,297,297,297, -1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,297,297,297,297,1523,1523, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,297,297,1535,1535,1535,1535,1535,1535,1535,1535,1535, +1536,1536,1536,1536,1536,1536,1536,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 270 */ +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1539,1539,1539,1540,1541,1541,1541,1542,297,297,297,297, +1543,1543,1543,1543,1543,1543,1543,1543,1543,1543,297,297,297,297,1544,1544, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, + +/* block 271 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5354,7 +5392,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 271 */ +/* block 272 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5362,351 +5400,331 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, -/* block 272 */ -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524,1524,1524, -1526,1524,1524,1524,1524,340,340,340,340,340,340,340,340,340,340,340, +/* block 273 */ +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,1545,1545, +1547,1545,1545,1545,1545,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 273 */ -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +/* block 274 */ +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 274 */ -1527,1527,1527,1527,340,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,340,1527,340,340,340,340, -340,340,1527,340,340,340,340,1527,340,1527,340,1527,340,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,340,1527,340,1527,340,1527, -340,1527,1527,340,1527,340,340,1527,1527,1527,1527,340,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,1527,1527,1527,340,1527,340, - /* block 275 */ -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,1527,1527,1527,340,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -309,309,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +1548,1548,1548,1548,338,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,1548,338,338,338,338, +338,338,1548,338,338,338,338,1548,338,1548,338,1548,338,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,338,1548,338,1548,338,1548, +338,1548,1548,338,1548,338,338,1548,1548,1548,1548,338,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,1548,1548,1548,338,1548,338, /* block 276 */ -1528,1528,1528,1528,1529,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,1548,1548,1548,338,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +307,307,338,338,338,338,338,338,338,338,338,338,338,338,338,338, /* block 277 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1529, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,1549,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 278 */ -814,814,814,814,814,814,814,814,814,814,814, 58, 58,1528,1528,1528, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1528, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,510,510, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,781,781,1528,1528,1528,1528, -1532,1532,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1532,1532, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1549, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 279 */ -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,1533,510, -510,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,1528,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, -1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +821,821,821,821,821,821,821,821,821,821,821, 58, 58,789,789,789, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,789, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,508,508, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,789,789,789,789,789,789, +1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552, /* block 280 */ -1535,1533,1536,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,510,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1533, -510,510,1533,1533,1533,1533,1533,1536,1533,1533,1533,510,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,1530,1530,1530,1530,1530,1530,1530, -1537,1537,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,1553,508, +508,1553,1553,1553,1553,1553,1553,1553,1553,1553,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,789,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, +1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, /* block 281 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1555,1553,1556,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,508,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,1553, +508,508,1553,1553,1553,1553,1553,1556,1553,1553,1553,508,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,1550,1550,1550,1550,1550,1550,1550, +1557,1557,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 282 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,785,1528,1528,785,785,785,785,785,785,785,785,785,1529,1529,1529, -1529,1529,1529,1529,1529,1529,785,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1529,1529, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 283 */ -1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1528,1528,785,785,1528,785,785,785,1528,1528,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1538,1538,1538,1529,1529,1538,1529,1529,1538,1539,1539,785,785,1529, -1529,1529,1529,1529,785,785,785,785,785,785,785,785,785,785,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1528,1528,785,1529,785,1528,785,1529,1529,1529,1540,1540,1540,1540,1540, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,793,789,789,793,793,793,793,793,793,793,793,793,1549,1549,1549, +1549,1549,1549,1549,1549,1549,793,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,1549,1549, /* block 284 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785, -1529,785,1538,1538,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529,1529,1538,1529,1529,1529, +1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,789,789,793,793,789,793,793,793,789,789,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1558,1558,1558,1549,1549,1558,1549,1549,1558,1559,1559,793,793,1549, +1549,1549,1549,1549,793,793,793,793,793,793,793,793,793,793,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,789,789,793,1549,793,789,793,1549,1549,1549,1560,1560,1560,1560,1560, /* block 285 */ -1529,1538,1538,1538,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1538, -1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1528,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793, +1549,793,1558,1558,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,1549,1558,1549,1549,1549, /* block 286 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,781,781, -781,781,781,781,781,781,1528,1528,1528,785,785,1529,1529,1529,1529,1528, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,1528,1528,785, -785,1528,1528,785,1539,1539,785,785,785,785,1538,1528,1528,1528,1528,1528, +1549,1558,1558,1558,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1558, +1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,789,1549, /* block 287 */ -1528,1528,1528,1528,1528,1528,1528,785,1528,1528,785,785,785,785,1528,1528, -1539,1528,1528,1528,1528,1538,1538,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1529,785,1528,1528,785,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,785,1528,1528,1528, -1528,1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,785,785,785,1528, -1528,785,1528,785,1528,1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785, -1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,789,789, +789,789,789,789,789,789,789,789,789,793,793,1549,1549,1549,1549,789, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,789,789,789,789,789,789,789,793, +793,789,789,793,1559,1559,793,793,793,793,1558,789,789,789,789,789, /* block 288 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1538,1538,1538,1538,1538, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,793,789,789,793,793,793,793,789,789, +1559,789,789,789,789,1558,1558,789,789,789,789,789,789,789,789,789, +789,789,789,789,1549,793,789,789,793,789,789,789,789,789,789,789, +789,793,793,789,789,789,789,789,789,789,789,789,793,789,789,789, +789,789,793,793,793,789,789,789,789,789,789,789,789,789,789,789, +789,793,793,793,789,789,789,789,789,789,789,789,793,793,793,789, +789,793,789,793,789,789,789,789,793,789,789,789,789,789,789,793, +789,789,789,793,789,789,789,789,789,789,793,1549,1549,1549,1549,1549, /* block 289 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,785,1538,785,785,785, -1529,1529,1529,1528,1528,1529,1529,1529,1530,1530,1530,1530,1529,1529,1529,1529, -785,785,785,785,785,785,1528,1528,1528,785,1528,1529,1529,1530,1530,1530, -785,1528,1528,785,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1558,1558,1558,1558,1558, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 290 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,1528,1528,1528,1530,1530,1530,1530,1528,1528,1528,1528,1528, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1549,1549,1549,1549,1549,789,789,789,789,789,793,1558,793,793,793, +1549,1549,1549,789,789,1549,1549,1549,1549,1550,1550,1550,1549,1549,1549,1549, +793,793,793,793,793,793,789,789,789,793,789,1549,1549,1550,1550,1550, +793,789,789,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 291 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530, -1529,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550, +1549,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 292 */ -781,781,781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 293 */ -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +802,802,802,802,802,802,802,802,802,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 294 */ -781,781,781,781,781,781,781,781,781,781,781,781,1538,1529,1529,1538, -1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538, -1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,781,1538,1538,1538,1529, -1529,1529,1529,1529,1529,1529,781,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529, +789,789,789,789,789,789,789,789,789,789,789,789,1558,1549,1549,1558, +1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558, +1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,789,1558,1558,1558,1549, +1549,1549,1549,1549,1549,1549,789,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549, /* block 295 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1541,1541,1541,1541,1529,1538,1538,1529,1538,1538,1529,1538,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538, -1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1561,1561,1561,1561,1549,1558,1558,1549,1558,1558,1549,1558,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558, +1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, /* block 296 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 297 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1538,1538,1529,1530,1530,1530,1530,1530,1530,1530,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1530, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1530,1530,1530,1530,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1558,1558,1549,1550,1549,1550,1550,1550,1550,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1550,1550,1550,1550,1550,1550,1550, /* block 298 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,196,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,196,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,196,196,196,196,196, /* block 299 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1032,1032, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1039,1039, /* block 300 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 301 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 302 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 303 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 304 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, - -/* block 305 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 306 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, +/* block 305 */ +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5714,7 +5732,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 307 */ +/* block 306 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5722,77 +5740,77 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,1032,1032, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,1039,1039, + +/* block 307 */ +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 308 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,196, /* block 309 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +771,776,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, /* block 310 */ -765,770,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 311 */ -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, /* block 312 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 313 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, - -/* block 314 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1032,1032, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1039,1039, }; #if UCD_BLOCK_SIZE != 128 diff --git a/src/pcre2_ucp.h b/src/pcre2_ucp.h index 513c54e..74c1cc5 100644 --- a/src/pcre2_ucp.h +++ b/src/pcre2_ucp.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD #define PCRE2_UCP_H_IDEMPOTENT_GUARD @@ -301,6 +302,7 @@ enum { ucp_Multani, ucp_Old_Hungarian, ucp_Adlam, + ucp_Newa, ucp_Osage, ucp_Tangut, ucp_Masaram_Gondi, @@ -376,7 +378,6 @@ enum { ucp_SignWriting, ucp_Bhaiksuki, ucp_Marchen, - ucp_Newa, ucp_Nushu, ucp_Soyombo, ucp_Zanabazar_Square, @@ -394,6 +395,10 @@ enum { ucp_Kawi, ucp_Nag_Mundari, ucp_Kirat_Rai, + ucp_Sidetic, + ucp_Tai_Yo, + ucp_Tolong_Siki, + ucp_Beria_Erfe, /* This must be last */ ucp_Script_Count diff --git a/src/pcre2_ucptables_inc.h b/src/pcre2_ucptables_inc.h index 6f1731d..06a5c0e 100644 --- a/src/pcre2_ucptables_inc.h +++ b/src/pcre2_ucptables_inc.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifdef SUPPORT_UNICODE /* The PRIV(utt)[] table below translates Unicode property names into type and @@ -81,6 +82,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_batk0 STR_b STR_a STR_t STR_k "\0" #define STRING_beng0 STR_b STR_e STR_n STR_g "\0" #define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i "\0" +#define STRING_berf0 STR_b STR_e STR_r STR_f "\0" +#define STRING_beriaerfe0 STR_b STR_e STR_r STR_i STR_a STR_e STR_r STR_f STR_e "\0" #define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0" #define STRING_bhks0 STR_b STR_h STR_k STR_s "\0" #define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l "\0" @@ -459,6 +462,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_shrd0 STR_s STR_h STR_r STR_d "\0" #define STRING_sidd0 STR_s STR_i STR_d STR_d "\0" #define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m "\0" +#define STRING_sidetic0 STR_s STR_i STR_d STR_e STR_t STR_i STR_c "\0" +#define STRING_sidt0 STR_s STR_i STR_d STR_t "\0" #define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g "\0" #define STRING_sind0 STR_s STR_i STR_n STR_d "\0" #define STRING_sinh0 STR_s STR_i STR_n STR_h "\0" @@ -490,6 +495,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_taile0 STR_t STR_a STR_i STR_l STR_e "\0" #define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m "\0" #define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t "\0" +#define STRING_taiyo0 STR_t STR_a STR_i STR_y STR_o "\0" #define STRING_takr0 STR_t STR_a STR_k STR_r "\0" #define STRING_takri0 STR_t STR_a STR_k STR_r STR_i "\0" #define STRING_tale0 STR_t STR_a STR_l STR_e "\0" @@ -500,6 +506,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a "\0" #define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t "\0" #define STRING_tavt0 STR_t STR_a STR_v STR_t "\0" +#define STRING_tayo0 STR_t STR_a STR_y STR_o "\0" #define STRING_telu0 STR_t STR_e STR_l STR_u "\0" #define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u "\0" #define STRING_term0 STR_t STR_e STR_r STR_m "\0" @@ -517,6 +524,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tnsa0 STR_t STR_n STR_s STR_a "\0" #define STRING_todhri0 STR_t STR_o STR_d STR_h STR_r STR_i "\0" #define STRING_todr0 STR_t STR_o STR_d STR_r "\0" +#define STRING_tolongsiki0 STR_t STR_o STR_l STR_o STR_n STR_g STR_s STR_i STR_k STR_i "\0" +#define STRING_tols0 STR_t STR_o STR_l STR_s "\0" #define STRING_toto0 STR_t STR_o STR_t STR_o "\0" #define STRING_tulutigalari0 STR_t STR_u STR_l STR_u STR_t STR_i STR_g STR_a STR_l STR_a STR_r STR_i "\0" #define STRING_tutg0 STR_t STR_u STR_t STR_g "\0" @@ -593,6 +602,8 @@ const char PRIV(utt_names)[] = STRING_batk0 STRING_beng0 STRING_bengali0 + STRING_berf0 + STRING_beriaerfe0 STRING_bhaiksuki0 STRING_bhks0 STRING_bidial0 @@ -971,6 +982,8 @@ const char PRIV(utt_names)[] = STRING_shrd0 STRING_sidd0 STRING_siddham0 + STRING_sidetic0 + STRING_sidt0 STRING_signwriting0 STRING_sind0 STRING_sinh0 @@ -1002,6 +1015,7 @@ const char PRIV(utt_names)[] = STRING_taile0 STRING_taitham0 STRING_taiviet0 + STRING_taiyo0 STRING_takr0 STRING_takri0 STRING_tale0 @@ -1012,6 +1026,7 @@ const char PRIV(utt_names)[] = STRING_tangsa0 STRING_tangut0 STRING_tavt0 + STRING_tayo0 STRING_telu0 STRING_telugu0 STRING_term0 @@ -1029,6 +1044,8 @@ const char PRIV(utt_names)[] = STRING_tnsa0 STRING_todhri0 STRING_todr0 + STRING_tolongsiki0 + STRING_tols0 STRING_toto0 STRING_tulutigalari0 STRING_tutg0 @@ -1105,488 +1122,496 @@ const ucp_type_table PRIV(utt)[] = { { 177, PT_SC, ucp_Batak }, { 182, PT_SCX, ucp_Bengali }, { 187, PT_SCX, ucp_Bengali }, - { 195, PT_SC, ucp_Bhaiksuki }, - { 205, PT_SC, ucp_Bhaiksuki }, - { 210, PT_BIDICL, ucp_bidiAL }, - { 217, PT_BIDICL, ucp_bidiAN }, - { 224, PT_BIDICL, ucp_bidiB }, - { 230, PT_BIDICL, ucp_bidiBN }, - { 237, PT_BOOL, ucp_Bidi_Control }, - { 243, PT_BOOL, ucp_Bidi_Control }, - { 255, PT_BIDICL, ucp_bidiCS }, - { 262, PT_BIDICL, ucp_bidiEN }, - { 269, PT_BIDICL, ucp_bidiES }, - { 276, PT_BIDICL, ucp_bidiET }, - { 283, PT_BIDICL, ucp_bidiFSI }, - { 291, PT_BIDICL, ucp_bidiL }, - { 297, PT_BIDICL, ucp_bidiLRE }, - { 305, PT_BIDICL, ucp_bidiLRI }, - { 313, PT_BIDICL, ucp_bidiLRO }, - { 321, PT_BOOL, ucp_Bidi_Mirrored }, - { 327, PT_BOOL, ucp_Bidi_Mirrored }, - { 340, PT_BIDICL, ucp_bidiNSM }, - { 348, PT_BIDICL, ucp_bidiON }, - { 355, PT_BIDICL, ucp_bidiPDF }, - { 363, PT_BIDICL, ucp_bidiPDI }, - { 371, PT_BIDICL, ucp_bidiR }, - { 377, PT_BIDICL, ucp_bidiRLE }, - { 385, PT_BIDICL, ucp_bidiRLI }, - { 393, PT_BIDICL, ucp_bidiRLO }, - { 401, PT_BIDICL, ucp_bidiS }, - { 407, PT_BIDICL, ucp_bidiWS }, - { 414, PT_SCX, ucp_Bopomofo }, - { 419, PT_SCX, ucp_Bopomofo }, - { 428, PT_SC, ucp_Brahmi }, - { 433, PT_SC, ucp_Brahmi }, - { 440, PT_SC, ucp_Braille }, - { 445, PT_SC, ucp_Braille }, - { 453, PT_SCX, ucp_Buginese }, - { 458, PT_SCX, ucp_Buginese }, - { 467, PT_SCX, ucp_Buhid }, - { 472, PT_SCX, ucp_Buhid }, - { 478, PT_GC, ucp_C }, - { 480, PT_SCX, ucp_Chakma }, - { 485, PT_SC, ucp_Canadian_Aboriginal }, - { 504, PT_SC, ucp_Canadian_Aboriginal }, - { 509, PT_SCX, ucp_Carian }, - { 514, PT_SCX, ucp_Carian }, - { 521, PT_BOOL, ucp_Cased }, - { 527, PT_BOOL, ucp_Case_Ignorable }, - { 541, PT_SCX, ucp_Caucasian_Albanian }, - { 559, PT_PC, ucp_Cc }, - { 562, PT_PC, ucp_Cf }, - { 565, PT_SCX, ucp_Chakma }, - { 572, PT_SC, ucp_Cham }, - { 577, PT_BOOL, ucp_Changes_When_Casefolded }, - { 599, PT_BOOL, ucp_Changes_When_Casemapped }, - { 621, PT_BOOL, ucp_Changes_When_Lowercased }, - { 643, PT_BOOL, ucp_Changes_When_Titlecased }, - { 665, PT_BOOL, ucp_Changes_When_Uppercased }, - { 687, PT_SCX, ucp_Cherokee }, - { 692, PT_SCX, ucp_Cherokee }, - { 701, PT_SC, ucp_Chorasmian }, - { 712, PT_SC, ucp_Chorasmian }, - { 717, PT_BOOL, ucp_Case_Ignorable }, - { 720, PT_PC, ucp_Cn }, - { 723, PT_PC, ucp_Co }, - { 726, PT_SC, ucp_Common }, - { 733, PT_SCX, ucp_Coptic }, - { 738, PT_SCX, ucp_Coptic }, - { 745, PT_SCX, ucp_Cypro_Minoan }, - { 750, PT_SCX, ucp_Cypriot }, - { 755, PT_PC, ucp_Cs }, - { 758, PT_SC, ucp_Cuneiform }, - { 768, PT_BOOL, ucp_Changes_When_Casefolded }, - { 773, PT_BOOL, ucp_Changes_When_Casemapped }, - { 778, PT_BOOL, ucp_Changes_When_Lowercased }, - { 782, PT_BOOL, ucp_Changes_When_Titlecased }, - { 786, PT_BOOL, ucp_Changes_When_Uppercased }, - { 790, PT_SCX, ucp_Cypriot }, - { 798, PT_SCX, ucp_Cypro_Minoan }, - { 810, PT_SCX, ucp_Cyrillic }, - { 819, PT_SCX, ucp_Cyrillic }, - { 824, PT_BOOL, ucp_Dash }, - { 829, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 855, PT_BOOL, ucp_Deprecated }, - { 859, PT_BOOL, ucp_Deprecated }, - { 870, PT_SC, ucp_Deseret }, - { 878, PT_SCX, ucp_Devanagari }, - { 883, PT_SCX, ucp_Devanagari }, - { 894, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 897, PT_BOOL, ucp_Diacritic }, - { 901, PT_BOOL, ucp_Diacritic }, - { 911, PT_SC, ucp_Dives_Akuru }, - { 916, PT_SC, ucp_Dives_Akuru }, - { 927, PT_SCX, ucp_Dogra }, - { 932, PT_SCX, ucp_Dogra }, - { 938, PT_SC, ucp_Deseret }, - { 943, PT_SCX, ucp_Duployan }, - { 948, PT_SCX, ucp_Duployan }, - { 957, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 963, PT_BOOL, ucp_Emoji_Component }, - { 969, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 974, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 994, PT_SCX, ucp_Elbasan }, - { 999, PT_SCX, ucp_Elbasan }, - { 1007, PT_SC, ucp_Elymaic }, - { 1012, PT_SC, ucp_Elymaic }, - { 1020, PT_BOOL, ucp_Emoji_Modifier }, - { 1025, PT_BOOL, ucp_Emoji }, - { 1031, PT_BOOL, ucp_Emoji_Component }, - { 1046, PT_BOOL, ucp_Emoji_Modifier }, - { 1060, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 1078, PT_BOOL, ucp_Emoji_Presentation }, - { 1096, PT_BOOL, ucp_Emoji_Presentation }, - { 1102, PT_SCX, ucp_Ethiopic }, - { 1107, PT_SCX, ucp_Ethiopic }, - { 1116, PT_BOOL, ucp_Extender }, - { 1120, PT_BOOL, ucp_Extended_Pictographic }, - { 1141, PT_BOOL, ucp_Extender }, - { 1150, PT_BOOL, ucp_Extended_Pictographic }, - { 1158, PT_SCX, ucp_Garay }, - { 1163, PT_SCX, ucp_Garay }, - { 1169, PT_SCX, ucp_Georgian }, - { 1174, PT_SCX, ucp_Georgian }, - { 1183, PT_SCX, ucp_Glagolitic }, - { 1188, PT_SCX, ucp_Glagolitic }, - { 1199, PT_SCX, ucp_Gunjala_Gondi }, - { 1204, PT_SCX, ucp_Masaram_Gondi }, - { 1209, PT_SCX, ucp_Gothic }, - { 1214, PT_SCX, ucp_Gothic }, - { 1221, PT_SCX, ucp_Grantha }, - { 1226, PT_SCX, ucp_Grantha }, - { 1234, PT_BOOL, ucp_Grapheme_Base }, - { 1247, PT_BOOL, ucp_Grapheme_Extend }, - { 1262, PT_BOOL, ucp_Grapheme_Link }, - { 1275, PT_BOOL, ucp_Grapheme_Base }, - { 1282, PT_SCX, ucp_Greek }, - { 1288, PT_SCX, ucp_Greek }, - { 1293, PT_BOOL, ucp_Grapheme_Extend }, - { 1299, PT_BOOL, ucp_Grapheme_Link }, - { 1306, PT_SCX, ucp_Gujarati }, - { 1315, PT_SCX, ucp_Gujarati }, - { 1320, PT_SCX, ucp_Gurung_Khema }, - { 1325, PT_SCX, ucp_Gunjala_Gondi }, - { 1338, PT_SCX, ucp_Gurmukhi }, - { 1347, PT_SCX, ucp_Gurmukhi }, - { 1352, PT_SCX, ucp_Gurung_Khema }, - { 1364, PT_SCX, ucp_Han }, - { 1368, PT_SCX, ucp_Hangul }, - { 1373, PT_SCX, ucp_Hangul }, - { 1380, PT_SCX, ucp_Han }, - { 1385, PT_SCX, ucp_Hanifi_Rohingya }, - { 1400, PT_SCX, ucp_Hanunoo }, - { 1405, PT_SCX, ucp_Hanunoo }, - { 1413, PT_SC, ucp_Hatran }, - { 1418, PT_SC, ucp_Hatran }, - { 1425, PT_SCX, ucp_Hebrew }, - { 1430, PT_SCX, ucp_Hebrew }, - { 1437, PT_BOOL, ucp_Hex_Digit }, - { 1441, PT_BOOL, ucp_Hex_Digit }, - { 1450, PT_SCX, ucp_Hiragana }, - { 1455, PT_SCX, ucp_Hiragana }, - { 1464, PT_SC, ucp_Anatolian_Hieroglyphs }, - { 1469, PT_SC, ucp_Pahawh_Hmong }, - { 1474, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 1479, PT_SCX, ucp_Old_Hungarian }, - { 1484, PT_BOOL, ucp_ID_Continue }, - { 1488, PT_BOOL, ucp_ID_Compat_Math_Continue }, - { 1509, PT_BOOL, ucp_ID_Compat_Math_Start }, - { 1527, PT_BOOL, ucp_ID_Continue }, - { 1538, PT_BOOL, ucp_Ideographic }, - { 1543, PT_BOOL, ucp_Ideographic }, - { 1555, PT_BOOL, ucp_ID_Start }, - { 1559, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1564, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1582, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1587, PT_BOOL, ucp_ID_Start }, - { 1595, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1614, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1619, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1636, PT_SC, ucp_Imperial_Aramaic }, - { 1652, PT_BOOL, ucp_InCB }, - { 1657, PT_SC, ucp_Inherited }, - { 1667, PT_SC, ucp_Inscriptional_Pahlavi }, - { 1688, PT_SC, ucp_Inscriptional_Parthian }, - { 1710, PT_SC, ucp_Old_Italic }, - { 1715, PT_SCX, ucp_Javanese }, - { 1720, PT_SCX, ucp_Javanese }, - { 1729, PT_BOOL, ucp_Join_Control }, - { 1735, PT_BOOL, ucp_Join_Control }, - { 1747, PT_SCX, ucp_Kaithi }, - { 1754, PT_SCX, ucp_Kayah_Li }, - { 1759, PT_SCX, ucp_Katakana }, - { 1764, PT_SCX, ucp_Kannada }, - { 1772, PT_SCX, ucp_Katakana }, - { 1781, PT_SC, ucp_Kawi }, - { 1786, PT_SCX, ucp_Kayah_Li }, - { 1794, PT_SC, ucp_Kharoshthi }, - { 1799, PT_SC, ucp_Kharoshthi }, - { 1810, PT_SC, ucp_Khitan_Small_Script }, - { 1828, PT_SC, ucp_Khmer }, - { 1834, PT_SC, ucp_Khmer }, - { 1839, PT_SCX, ucp_Khojki }, - { 1844, PT_SCX, ucp_Khojki }, - { 1851, PT_SCX, ucp_Khudawadi }, - { 1861, PT_SC, ucp_Kirat_Rai }, - { 1870, PT_SC, ucp_Khitan_Small_Script }, - { 1875, PT_SCX, ucp_Kannada }, - { 1880, PT_SC, ucp_Kirat_Rai }, - { 1885, PT_SCX, ucp_Kaithi }, - { 1890, PT_GC, ucp_L }, - { 1892, PT_LAMP, 0 }, - { 1895, PT_SC, ucp_Tai_Tham }, - { 1900, PT_SC, ucp_Lao }, - { 1904, PT_SC, ucp_Lao }, - { 1909, PT_SCX, ucp_Latin }, - { 1915, PT_SCX, ucp_Latin }, - { 1920, PT_LAMP, 0 }, - { 1923, PT_SC, ucp_Lepcha }, - { 1928, PT_SC, ucp_Lepcha }, - { 1935, PT_SCX, ucp_Limbu }, - { 1940, PT_SCX, ucp_Limbu }, - { 1946, PT_SCX, ucp_Linear_A }, - { 1951, PT_SCX, ucp_Linear_B }, - { 1956, PT_SCX, ucp_Linear_A }, - { 1964, PT_SCX, ucp_Linear_B }, - { 1972, PT_SCX, ucp_Lisu }, - { 1977, PT_PC, ucp_Ll }, - { 1980, PT_PC, ucp_Lm }, - { 1983, PT_PC, ucp_Lo }, - { 1986, PT_BOOL, ucp_Logical_Order_Exception }, - { 1990, PT_BOOL, ucp_Logical_Order_Exception }, - { 2012, PT_BOOL, ucp_Lowercase }, - { 2018, PT_BOOL, ucp_Lowercase }, - { 2028, PT_PC, ucp_Lt }, - { 2031, PT_PC, ucp_Lu }, - { 2034, PT_SCX, ucp_Lycian }, - { 2039, PT_SCX, ucp_Lycian }, - { 2046, PT_SCX, ucp_Lydian }, - { 2051, PT_SCX, ucp_Lydian }, - { 2058, PT_GC, ucp_M }, - { 2060, PT_SCX, ucp_Mahajani }, - { 2069, PT_SCX, ucp_Mahajani }, - { 2074, PT_SC, ucp_Makasar }, - { 2079, PT_SC, ucp_Makasar }, - { 2087, PT_SCX, ucp_Malayalam }, - { 2097, PT_SCX, ucp_Mandaic }, - { 2102, PT_SCX, ucp_Mandaic }, - { 2110, PT_SCX, ucp_Manichaean }, - { 2115, PT_SCX, ucp_Manichaean }, - { 2126, PT_SC, ucp_Marchen }, - { 2131, PT_SC, ucp_Marchen }, - { 2139, PT_SCX, ucp_Masaram_Gondi }, - { 2152, PT_BOOL, ucp_Math }, - { 2157, PT_PC, ucp_Mc }, - { 2160, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2164, PT_PC, ucp_Me }, - { 2167, PT_SC, ucp_Medefaidrin }, - { 2179, PT_SC, ucp_Medefaidrin }, - { 2184, PT_SC, ucp_Meetei_Mayek }, - { 2196, PT_SC, ucp_Mende_Kikakui }, - { 2201, PT_SC, ucp_Mende_Kikakui }, - { 2214, PT_SC, ucp_Meroitic_Cursive }, - { 2219, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2224, PT_SC, ucp_Meroitic_Cursive }, - { 2240, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2260, PT_SC, ucp_Miao }, - { 2265, PT_SCX, ucp_Malayalam }, - { 2270, PT_PC, ucp_Mn }, - { 2273, PT_SCX, ucp_Modi }, - { 2278, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2300, PT_SCX, ucp_Mongolian }, - { 2305, PT_SCX, ucp_Mongolian }, - { 2315, PT_SC, ucp_Mro }, - { 2319, PT_SC, ucp_Mro }, - { 2324, PT_SC, ucp_Meetei_Mayek }, - { 2329, PT_SCX, ucp_Multani }, - { 2334, PT_SCX, ucp_Multani }, - { 2342, PT_SCX, ucp_Myanmar }, - { 2350, PT_SCX, ucp_Myanmar }, - { 2355, PT_GC, ucp_N }, - { 2357, PT_SC, ucp_Nabataean }, - { 2367, PT_SC, ucp_Nag_Mundari }, - { 2372, PT_SC, ucp_Nag_Mundari }, - { 2383, PT_SCX, ucp_Nandinagari }, - { 2388, PT_SCX, ucp_Nandinagari }, - { 2400, PT_SC, ucp_Old_North_Arabian }, - { 2405, PT_SC, ucp_Nabataean }, - { 2410, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2416, PT_PC, ucp_Nd }, - { 2419, PT_SC, ucp_Newa }, - { 2424, PT_SC, ucp_New_Tai_Lue }, - { 2434, PT_SCX, ucp_Nko }, - { 2438, PT_SCX, ucp_Nko }, - { 2443, PT_PC, ucp_Nl }, - { 2446, PT_PC, ucp_No }, - { 2449, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2471, PT_SC, ucp_Nushu }, - { 2476, PT_SC, ucp_Nushu }, - { 2482, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 2503, PT_SC, ucp_Ogham }, - { 2508, PT_SC, ucp_Ogham }, - { 2514, PT_SC, ucp_Ol_Chiki }, - { 2522, PT_SC, ucp_Ol_Chiki }, - { 2527, PT_SCX, ucp_Old_Hungarian }, - { 2540, PT_SC, ucp_Old_Italic }, - { 2550, PT_SC, ucp_Old_North_Arabian }, - { 2566, PT_SCX, ucp_Old_Permic }, - { 2576, PT_SC, ucp_Old_Persian }, - { 2587, PT_SC, ucp_Old_Sogdian }, - { 2598, PT_SC, ucp_Old_South_Arabian }, - { 2614, PT_SCX, ucp_Old_Turkic }, - { 2624, PT_SCX, ucp_Old_Uyghur }, - { 2634, PT_SCX, ucp_Ol_Onal }, - { 2641, PT_SCX, ucp_Ol_Onal }, - { 2646, PT_SCX, ucp_Oriya }, - { 2652, PT_SCX, ucp_Old_Turkic }, - { 2657, PT_SCX, ucp_Oriya }, - { 2662, PT_SCX, ucp_Osage }, - { 2668, PT_SCX, ucp_Osage }, - { 2673, PT_SC, ucp_Osmanya }, - { 2678, PT_SC, ucp_Osmanya }, - { 2686, PT_SCX, ucp_Old_Uyghur }, - { 2691, PT_GC, ucp_P }, - { 2693, PT_SC, ucp_Pahawh_Hmong }, - { 2705, PT_SC, ucp_Palmyrene }, - { 2710, PT_SC, ucp_Palmyrene }, - { 2720, PT_BOOL, ucp_Pattern_Syntax }, - { 2727, PT_BOOL, ucp_Pattern_Syntax }, - { 2741, PT_BOOL, ucp_Pattern_White_Space }, - { 2759, PT_BOOL, ucp_Pattern_White_Space }, - { 2765, PT_SC, ucp_Pau_Cin_Hau }, - { 2770, PT_SC, ucp_Pau_Cin_Hau }, - { 2780, PT_PC, ucp_Pc }, - { 2783, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2787, PT_PC, ucp_Pd }, - { 2790, PT_PC, ucp_Pe }, - { 2793, PT_SCX, ucp_Old_Permic }, - { 2798, PT_PC, ucp_Pf }, - { 2801, PT_SCX, ucp_Phags_Pa }, - { 2806, PT_SCX, ucp_Phags_Pa }, - { 2814, PT_SC, ucp_Inscriptional_Pahlavi }, - { 2819, PT_SCX, ucp_Psalter_Pahlavi }, - { 2824, PT_SC, ucp_Phoenician }, - { 2829, PT_SC, ucp_Phoenician }, - { 2840, PT_PC, ucp_Pi }, - { 2843, PT_SC, ucp_Miao }, - { 2848, PT_PC, ucp_Po }, - { 2851, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2878, PT_SC, ucp_Inscriptional_Parthian }, - { 2883, PT_PC, ucp_Ps }, - { 2886, PT_SCX, ucp_Psalter_Pahlavi }, - { 2901, PT_SCX, ucp_Coptic }, - { 2906, PT_SC, ucp_Inherited }, - { 2911, PT_BOOL, ucp_Quotation_Mark }, - { 2917, PT_BOOL, ucp_Quotation_Mark }, - { 2931, PT_BOOL, ucp_Radical }, - { 2939, PT_BOOL, ucp_Regional_Indicator }, - { 2957, PT_SC, ucp_Rejang }, - { 2964, PT_BOOL, ucp_Regional_Indicator }, - { 2967, PT_SC, ucp_Rejang }, - { 2972, PT_SCX, ucp_Hanifi_Rohingya }, - { 2977, PT_SCX, ucp_Runic }, - { 2983, PT_SCX, ucp_Runic }, - { 2988, PT_GC, ucp_S }, - { 2990, PT_SCX, ucp_Samaritan }, - { 3000, PT_SCX, ucp_Samaritan }, - { 3005, PT_SC, ucp_Old_South_Arabian }, - { 3010, PT_SC, ucp_Saurashtra }, - { 3015, PT_SC, ucp_Saurashtra }, - { 3026, PT_PC, ucp_Sc }, - { 3029, PT_BOOL, ucp_Soft_Dotted }, - { 3032, PT_BOOL, ucp_Sentence_Terminal }, - { 3049, PT_SC, ucp_SignWriting }, - { 3054, PT_SCX, ucp_Sharada }, - { 3062, PT_SCX, ucp_Shavian }, - { 3070, PT_SCX, ucp_Shavian }, - { 3075, PT_SCX, ucp_Sharada }, - { 3080, PT_SC, ucp_Siddham }, - { 3085, PT_SC, ucp_Siddham }, - { 3093, PT_SC, ucp_SignWriting }, - { 3105, PT_SCX, ucp_Khudawadi }, - { 3110, PT_SCX, ucp_Sinhala }, - { 3115, PT_SCX, ucp_Sinhala }, - { 3123, PT_PC, ucp_Sk }, - { 3126, PT_PC, ucp_Sm }, - { 3129, PT_PC, ucp_So }, - { 3132, PT_BOOL, ucp_Soft_Dotted }, - { 3143, PT_SCX, ucp_Sogdian }, - { 3148, PT_SCX, ucp_Sogdian }, - { 3156, PT_SC, ucp_Old_Sogdian }, - { 3161, PT_SC, ucp_Sora_Sompeng }, - { 3166, PT_SC, ucp_Sora_Sompeng }, - { 3178, PT_SC, ucp_Soyombo }, - { 3183, PT_SC, ucp_Soyombo }, - { 3191, PT_BOOL, ucp_White_Space }, - { 3197, PT_BOOL, ucp_Sentence_Terminal }, - { 3203, PT_SC, ucp_Sundanese }, - { 3208, PT_SC, ucp_Sundanese }, - { 3218, PT_SCX, ucp_Sunuwar }, - { 3223, PT_SCX, ucp_Sunuwar }, - { 3231, PT_SCX, ucp_Syloti_Nagri }, - { 3236, PT_SCX, ucp_Syloti_Nagri }, - { 3248, PT_SCX, ucp_Syriac }, - { 3253, PT_SCX, ucp_Syriac }, - { 3260, PT_SCX, ucp_Tagalog }, - { 3268, PT_SCX, ucp_Tagbanwa }, - { 3273, PT_SCX, ucp_Tagbanwa }, - { 3282, PT_SCX, ucp_Tai_Le }, - { 3288, PT_SC, ucp_Tai_Tham }, - { 3296, PT_SC, ucp_Tai_Viet }, - { 3304, PT_SCX, ucp_Takri }, - { 3309, PT_SCX, ucp_Takri }, - { 3315, PT_SCX, ucp_Tai_Le }, - { 3320, PT_SC, ucp_New_Tai_Lue }, - { 3325, PT_SCX, ucp_Tamil }, - { 3331, PT_SCX, ucp_Tamil }, - { 3336, PT_SCX, ucp_Tangut }, - { 3341, PT_SC, ucp_Tangsa }, - { 3348, PT_SCX, ucp_Tangut }, - { 3355, PT_SC, ucp_Tai_Viet }, - { 3360, PT_SCX, ucp_Telugu }, - { 3365, PT_SCX, ucp_Telugu }, - { 3372, PT_BOOL, ucp_Terminal_Punctuation }, - { 3377, PT_BOOL, ucp_Terminal_Punctuation }, - { 3397, PT_SCX, ucp_Tifinagh }, - { 3402, PT_SCX, ucp_Tagalog }, - { 3407, PT_SCX, ucp_Thaana }, - { 3412, PT_SCX, ucp_Thaana }, - { 3419, PT_SCX, ucp_Thai }, - { 3424, PT_SCX, ucp_Tibetan }, - { 3432, PT_SCX, ucp_Tibetan }, - { 3437, PT_SCX, ucp_Tifinagh }, - { 3446, PT_SCX, ucp_Tirhuta }, - { 3451, PT_SCX, ucp_Tirhuta }, - { 3459, PT_SC, ucp_Tangsa }, - { 3464, PT_SCX, ucp_Todhri }, - { 3471, PT_SCX, ucp_Todhri }, - { 3476, PT_SCX, ucp_Toto }, - { 3481, PT_SCX, ucp_Tulu_Tigalari }, - { 3494, PT_SCX, ucp_Tulu_Tigalari }, - { 3499, PT_SC, ucp_Ugaritic }, - { 3504, PT_SC, ucp_Ugaritic }, - { 3513, PT_BOOL, ucp_Unified_Ideograph }, - { 3519, PT_BOOL, ucp_Unified_Ideograph }, - { 3536, PT_SC, ucp_Unknown }, - { 3544, PT_BOOL, ucp_Uppercase }, - { 3550, PT_BOOL, ucp_Uppercase }, - { 3560, PT_SC, ucp_Vai }, - { 3564, PT_SC, ucp_Vai }, - { 3569, PT_BOOL, ucp_Variation_Selector }, - { 3587, PT_SC, ucp_Vithkuqi }, - { 3592, PT_SC, ucp_Vithkuqi }, - { 3601, PT_BOOL, ucp_Variation_Selector }, - { 3604, PT_SC, ucp_Wancho }, - { 3611, PT_SC, ucp_Warang_Citi }, - { 3616, PT_SC, ucp_Warang_Citi }, - { 3627, PT_SC, ucp_Wancho }, - { 3632, PT_BOOL, ucp_White_Space }, - { 3643, PT_BOOL, ucp_White_Space }, - { 3650, PT_ALNUM, 0 }, - { 3654, PT_BOOL, ucp_XID_Continue }, - { 3659, PT_BOOL, ucp_XID_Continue }, - { 3671, PT_BOOL, ucp_XID_Start }, - { 3676, PT_BOOL, ucp_XID_Start }, - { 3685, PT_SC, ucp_Old_Persian }, - { 3690, PT_PXSPACE, 0 }, - { 3694, PT_SPACE, 0 }, - { 3698, PT_SC, ucp_Cuneiform }, - { 3703, PT_UCNC, 0 }, - { 3707, PT_WORD, 0 }, - { 3711, PT_SCX, ucp_Yezidi }, - { 3716, PT_SCX, ucp_Yezidi }, - { 3723, PT_SCX, ucp_Yi }, - { 3726, PT_SCX, ucp_Yi }, - { 3731, PT_GC, ucp_Z }, - { 3733, PT_SC, ucp_Zanabazar_Square }, - { 3749, PT_SC, ucp_Zanabazar_Square }, - { 3754, PT_SC, ucp_Inherited }, - { 3759, PT_PC, ucp_Zl }, - { 3762, PT_PC, ucp_Zp }, - { 3765, PT_PC, ucp_Zs }, - { 3768, PT_SC, ucp_Common }, - { 3773, PT_SC, ucp_Unknown } + { 195, PT_SC, ucp_Beria_Erfe }, + { 200, PT_SC, ucp_Beria_Erfe }, + { 210, PT_SC, ucp_Bhaiksuki }, + { 220, PT_SC, ucp_Bhaiksuki }, + { 225, PT_BIDICL, ucp_bidiAL }, + { 232, PT_BIDICL, ucp_bidiAN }, + { 239, PT_BIDICL, ucp_bidiB }, + { 245, PT_BIDICL, ucp_bidiBN }, + { 252, PT_BOOL, ucp_Bidi_Control }, + { 258, PT_BOOL, ucp_Bidi_Control }, + { 270, PT_BIDICL, ucp_bidiCS }, + { 277, PT_BIDICL, ucp_bidiEN }, + { 284, PT_BIDICL, ucp_bidiES }, + { 291, PT_BIDICL, ucp_bidiET }, + { 298, PT_BIDICL, ucp_bidiFSI }, + { 306, PT_BIDICL, ucp_bidiL }, + { 312, PT_BIDICL, ucp_bidiLRE }, + { 320, PT_BIDICL, ucp_bidiLRI }, + { 328, PT_BIDICL, ucp_bidiLRO }, + { 336, PT_BOOL, ucp_Bidi_Mirrored }, + { 342, PT_BOOL, ucp_Bidi_Mirrored }, + { 355, PT_BIDICL, ucp_bidiNSM }, + { 363, PT_BIDICL, ucp_bidiON }, + { 370, PT_BIDICL, ucp_bidiPDF }, + { 378, PT_BIDICL, ucp_bidiPDI }, + { 386, PT_BIDICL, ucp_bidiR }, + { 392, PT_BIDICL, ucp_bidiRLE }, + { 400, PT_BIDICL, ucp_bidiRLI }, + { 408, PT_BIDICL, ucp_bidiRLO }, + { 416, PT_BIDICL, ucp_bidiS }, + { 422, PT_BIDICL, ucp_bidiWS }, + { 429, PT_SCX, ucp_Bopomofo }, + { 434, PT_SCX, ucp_Bopomofo }, + { 443, PT_SC, ucp_Brahmi }, + { 448, PT_SC, ucp_Brahmi }, + { 455, PT_SC, ucp_Braille }, + { 460, PT_SC, ucp_Braille }, + { 468, PT_SCX, ucp_Buginese }, + { 473, PT_SCX, ucp_Buginese }, + { 482, PT_SCX, ucp_Buhid }, + { 487, PT_SCX, ucp_Buhid }, + { 493, PT_GC, ucp_C }, + { 495, PT_SCX, ucp_Chakma }, + { 500, PT_SC, ucp_Canadian_Aboriginal }, + { 519, PT_SC, ucp_Canadian_Aboriginal }, + { 524, PT_SCX, ucp_Carian }, + { 529, PT_SCX, ucp_Carian }, + { 536, PT_BOOL, ucp_Cased }, + { 542, PT_BOOL, ucp_Case_Ignorable }, + { 556, PT_SCX, ucp_Caucasian_Albanian }, + { 574, PT_PC, ucp_Cc }, + { 577, PT_PC, ucp_Cf }, + { 580, PT_SCX, ucp_Chakma }, + { 587, PT_SC, ucp_Cham }, + { 592, PT_BOOL, ucp_Changes_When_Casefolded }, + { 614, PT_BOOL, ucp_Changes_When_Casemapped }, + { 636, PT_BOOL, ucp_Changes_When_Lowercased }, + { 658, PT_BOOL, ucp_Changes_When_Titlecased }, + { 680, PT_BOOL, ucp_Changes_When_Uppercased }, + { 702, PT_SCX, ucp_Cherokee }, + { 707, PT_SCX, ucp_Cherokee }, + { 716, PT_SC, ucp_Chorasmian }, + { 727, PT_SC, ucp_Chorasmian }, + { 732, PT_BOOL, ucp_Case_Ignorable }, + { 735, PT_PC, ucp_Cn }, + { 738, PT_PC, ucp_Co }, + { 741, PT_SC, ucp_Common }, + { 748, PT_SCX, ucp_Coptic }, + { 753, PT_SCX, ucp_Coptic }, + { 760, PT_SCX, ucp_Cypro_Minoan }, + { 765, PT_SCX, ucp_Cypriot }, + { 770, PT_PC, ucp_Cs }, + { 773, PT_SC, ucp_Cuneiform }, + { 783, PT_BOOL, ucp_Changes_When_Casefolded }, + { 788, PT_BOOL, ucp_Changes_When_Casemapped }, + { 793, PT_BOOL, ucp_Changes_When_Lowercased }, + { 797, PT_BOOL, ucp_Changes_When_Titlecased }, + { 801, PT_BOOL, ucp_Changes_When_Uppercased }, + { 805, PT_SCX, ucp_Cypriot }, + { 813, PT_SCX, ucp_Cypro_Minoan }, + { 825, PT_SCX, ucp_Cyrillic }, + { 834, PT_SCX, ucp_Cyrillic }, + { 839, PT_BOOL, ucp_Dash }, + { 844, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 870, PT_BOOL, ucp_Deprecated }, + { 874, PT_BOOL, ucp_Deprecated }, + { 885, PT_SC, ucp_Deseret }, + { 893, PT_SCX, ucp_Devanagari }, + { 898, PT_SCX, ucp_Devanagari }, + { 909, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 912, PT_BOOL, ucp_Diacritic }, + { 916, PT_BOOL, ucp_Diacritic }, + { 926, PT_SC, ucp_Dives_Akuru }, + { 931, PT_SC, ucp_Dives_Akuru }, + { 942, PT_SCX, ucp_Dogra }, + { 947, PT_SCX, ucp_Dogra }, + { 953, PT_SC, ucp_Deseret }, + { 958, PT_SCX, ucp_Duployan }, + { 963, PT_SCX, ucp_Duployan }, + { 972, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 978, PT_BOOL, ucp_Emoji_Component }, + { 984, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 989, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 1009, PT_SCX, ucp_Elbasan }, + { 1014, PT_SCX, ucp_Elbasan }, + { 1022, PT_SC, ucp_Elymaic }, + { 1027, PT_SC, ucp_Elymaic }, + { 1035, PT_BOOL, ucp_Emoji_Modifier }, + { 1040, PT_BOOL, ucp_Emoji }, + { 1046, PT_BOOL, ucp_Emoji_Component }, + { 1061, PT_BOOL, ucp_Emoji_Modifier }, + { 1075, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 1093, PT_BOOL, ucp_Emoji_Presentation }, + { 1111, PT_BOOL, ucp_Emoji_Presentation }, + { 1117, PT_SCX, ucp_Ethiopic }, + { 1122, PT_SCX, ucp_Ethiopic }, + { 1131, PT_BOOL, ucp_Extender }, + { 1135, PT_BOOL, ucp_Extended_Pictographic }, + { 1156, PT_BOOL, ucp_Extender }, + { 1165, PT_BOOL, ucp_Extended_Pictographic }, + { 1173, PT_SCX, ucp_Garay }, + { 1178, PT_SCX, ucp_Garay }, + { 1184, PT_SCX, ucp_Georgian }, + { 1189, PT_SCX, ucp_Georgian }, + { 1198, PT_SCX, ucp_Glagolitic }, + { 1203, PT_SCX, ucp_Glagolitic }, + { 1214, PT_SCX, ucp_Gunjala_Gondi }, + { 1219, PT_SCX, ucp_Masaram_Gondi }, + { 1224, PT_SCX, ucp_Gothic }, + { 1229, PT_SCX, ucp_Gothic }, + { 1236, PT_SCX, ucp_Grantha }, + { 1241, PT_SCX, ucp_Grantha }, + { 1249, PT_BOOL, ucp_Grapheme_Base }, + { 1262, PT_BOOL, ucp_Grapheme_Extend }, + { 1277, PT_BOOL, ucp_Grapheme_Link }, + { 1290, PT_BOOL, ucp_Grapheme_Base }, + { 1297, PT_SCX, ucp_Greek }, + { 1303, PT_SCX, ucp_Greek }, + { 1308, PT_BOOL, ucp_Grapheme_Extend }, + { 1314, PT_BOOL, ucp_Grapheme_Link }, + { 1321, PT_SCX, ucp_Gujarati }, + { 1330, PT_SCX, ucp_Gujarati }, + { 1335, PT_SCX, ucp_Gurung_Khema }, + { 1340, PT_SCX, ucp_Gunjala_Gondi }, + { 1353, PT_SCX, ucp_Gurmukhi }, + { 1362, PT_SCX, ucp_Gurmukhi }, + { 1367, PT_SCX, ucp_Gurung_Khema }, + { 1379, PT_SCX, ucp_Han }, + { 1383, PT_SCX, ucp_Hangul }, + { 1388, PT_SCX, ucp_Hangul }, + { 1395, PT_SCX, ucp_Han }, + { 1400, PT_SCX, ucp_Hanifi_Rohingya }, + { 1415, PT_SCX, ucp_Hanunoo }, + { 1420, PT_SCX, ucp_Hanunoo }, + { 1428, PT_SC, ucp_Hatran }, + { 1433, PT_SC, ucp_Hatran }, + { 1440, PT_SCX, ucp_Hebrew }, + { 1445, PT_SCX, ucp_Hebrew }, + { 1452, PT_BOOL, ucp_Hex_Digit }, + { 1456, PT_BOOL, ucp_Hex_Digit }, + { 1465, PT_SCX, ucp_Hiragana }, + { 1470, PT_SCX, ucp_Hiragana }, + { 1479, PT_SC, ucp_Anatolian_Hieroglyphs }, + { 1484, PT_SC, ucp_Pahawh_Hmong }, + { 1489, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1494, PT_SCX, ucp_Old_Hungarian }, + { 1499, PT_BOOL, ucp_ID_Continue }, + { 1503, PT_BOOL, ucp_ID_Compat_Math_Continue }, + { 1524, PT_BOOL, ucp_ID_Compat_Math_Start }, + { 1542, PT_BOOL, ucp_ID_Continue }, + { 1553, PT_BOOL, ucp_Ideographic }, + { 1558, PT_BOOL, ucp_Ideographic }, + { 1570, PT_BOOL, ucp_ID_Start }, + { 1574, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1579, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1597, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1602, PT_BOOL, ucp_ID_Start }, + { 1610, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1629, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1634, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1651, PT_SC, ucp_Imperial_Aramaic }, + { 1667, PT_BOOL, ucp_InCB }, + { 1672, PT_SC, ucp_Inherited }, + { 1682, PT_SC, ucp_Inscriptional_Pahlavi }, + { 1703, PT_SC, ucp_Inscriptional_Parthian }, + { 1725, PT_SC, ucp_Old_Italic }, + { 1730, PT_SCX, ucp_Javanese }, + { 1735, PT_SCX, ucp_Javanese }, + { 1744, PT_BOOL, ucp_Join_Control }, + { 1750, PT_BOOL, ucp_Join_Control }, + { 1762, PT_SCX, ucp_Kaithi }, + { 1769, PT_SCX, ucp_Kayah_Li }, + { 1774, PT_SCX, ucp_Katakana }, + { 1779, PT_SCX, ucp_Kannada }, + { 1787, PT_SCX, ucp_Katakana }, + { 1796, PT_SC, ucp_Kawi }, + { 1801, PT_SCX, ucp_Kayah_Li }, + { 1809, PT_SC, ucp_Kharoshthi }, + { 1814, PT_SC, ucp_Kharoshthi }, + { 1825, PT_SC, ucp_Khitan_Small_Script }, + { 1843, PT_SC, ucp_Khmer }, + { 1849, PT_SC, ucp_Khmer }, + { 1854, PT_SCX, ucp_Khojki }, + { 1859, PT_SCX, ucp_Khojki }, + { 1866, PT_SCX, ucp_Khudawadi }, + { 1876, PT_SC, ucp_Kirat_Rai }, + { 1885, PT_SC, ucp_Khitan_Small_Script }, + { 1890, PT_SCX, ucp_Kannada }, + { 1895, PT_SC, ucp_Kirat_Rai }, + { 1900, PT_SCX, ucp_Kaithi }, + { 1905, PT_GC, ucp_L }, + { 1907, PT_LAMP, 0 }, + { 1910, PT_SC, ucp_Tai_Tham }, + { 1915, PT_SC, ucp_Lao }, + { 1919, PT_SC, ucp_Lao }, + { 1924, PT_SCX, ucp_Latin }, + { 1930, PT_SCX, ucp_Latin }, + { 1935, PT_LAMP, 0 }, + { 1938, PT_SC, ucp_Lepcha }, + { 1943, PT_SC, ucp_Lepcha }, + { 1950, PT_SCX, ucp_Limbu }, + { 1955, PT_SCX, ucp_Limbu }, + { 1961, PT_SCX, ucp_Linear_A }, + { 1966, PT_SCX, ucp_Linear_B }, + { 1971, PT_SCX, ucp_Linear_A }, + { 1979, PT_SCX, ucp_Linear_B }, + { 1987, PT_SCX, ucp_Lisu }, + { 1992, PT_PC, ucp_Ll }, + { 1995, PT_PC, ucp_Lm }, + { 1998, PT_PC, ucp_Lo }, + { 2001, PT_BOOL, ucp_Logical_Order_Exception }, + { 2005, PT_BOOL, ucp_Logical_Order_Exception }, + { 2027, PT_BOOL, ucp_Lowercase }, + { 2033, PT_BOOL, ucp_Lowercase }, + { 2043, PT_PC, ucp_Lt }, + { 2046, PT_PC, ucp_Lu }, + { 2049, PT_SCX, ucp_Lycian }, + { 2054, PT_SCX, ucp_Lycian }, + { 2061, PT_SCX, ucp_Lydian }, + { 2066, PT_SCX, ucp_Lydian }, + { 2073, PT_GC, ucp_M }, + { 2075, PT_SCX, ucp_Mahajani }, + { 2084, PT_SCX, ucp_Mahajani }, + { 2089, PT_SC, ucp_Makasar }, + { 2094, PT_SC, ucp_Makasar }, + { 2102, PT_SCX, ucp_Malayalam }, + { 2112, PT_SCX, ucp_Mandaic }, + { 2117, PT_SCX, ucp_Mandaic }, + { 2125, PT_SCX, ucp_Manichaean }, + { 2130, PT_SCX, ucp_Manichaean }, + { 2141, PT_SC, ucp_Marchen }, + { 2146, PT_SC, ucp_Marchen }, + { 2154, PT_SCX, ucp_Masaram_Gondi }, + { 2167, PT_BOOL, ucp_Math }, + { 2172, PT_PC, ucp_Mc }, + { 2175, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2179, PT_PC, ucp_Me }, + { 2182, PT_SC, ucp_Medefaidrin }, + { 2194, PT_SC, ucp_Medefaidrin }, + { 2199, PT_SC, ucp_Meetei_Mayek }, + { 2211, PT_SC, ucp_Mende_Kikakui }, + { 2216, PT_SC, ucp_Mende_Kikakui }, + { 2229, PT_SC, ucp_Meroitic_Cursive }, + { 2234, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2239, PT_SC, ucp_Meroitic_Cursive }, + { 2255, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2275, PT_SC, ucp_Miao }, + { 2280, PT_SCX, ucp_Malayalam }, + { 2285, PT_PC, ucp_Mn }, + { 2288, PT_SCX, ucp_Modi }, + { 2293, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2315, PT_SCX, ucp_Mongolian }, + { 2320, PT_SCX, ucp_Mongolian }, + { 2330, PT_SC, ucp_Mro }, + { 2334, PT_SC, ucp_Mro }, + { 2339, PT_SC, ucp_Meetei_Mayek }, + { 2344, PT_SCX, ucp_Multani }, + { 2349, PT_SCX, ucp_Multani }, + { 2357, PT_SCX, ucp_Myanmar }, + { 2365, PT_SCX, ucp_Myanmar }, + { 2370, PT_GC, ucp_N }, + { 2372, PT_SC, ucp_Nabataean }, + { 2382, PT_SC, ucp_Nag_Mundari }, + { 2387, PT_SC, ucp_Nag_Mundari }, + { 2398, PT_SCX, ucp_Nandinagari }, + { 2403, PT_SCX, ucp_Nandinagari }, + { 2415, PT_SC, ucp_Old_North_Arabian }, + { 2420, PT_SC, ucp_Nabataean }, + { 2425, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2431, PT_PC, ucp_Nd }, + { 2434, PT_SCX, ucp_Newa }, + { 2439, PT_SC, ucp_New_Tai_Lue }, + { 2449, PT_SCX, ucp_Nko }, + { 2453, PT_SCX, ucp_Nko }, + { 2458, PT_PC, ucp_Nl }, + { 2461, PT_PC, ucp_No }, + { 2464, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2486, PT_SC, ucp_Nushu }, + { 2491, PT_SC, ucp_Nushu }, + { 2497, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 2518, PT_SC, ucp_Ogham }, + { 2523, PT_SC, ucp_Ogham }, + { 2529, PT_SC, ucp_Ol_Chiki }, + { 2537, PT_SC, ucp_Ol_Chiki }, + { 2542, PT_SCX, ucp_Old_Hungarian }, + { 2555, PT_SC, ucp_Old_Italic }, + { 2565, PT_SC, ucp_Old_North_Arabian }, + { 2581, PT_SCX, ucp_Old_Permic }, + { 2591, PT_SC, ucp_Old_Persian }, + { 2602, PT_SC, ucp_Old_Sogdian }, + { 2613, PT_SC, ucp_Old_South_Arabian }, + { 2629, PT_SCX, ucp_Old_Turkic }, + { 2639, PT_SCX, ucp_Old_Uyghur }, + { 2649, PT_SCX, ucp_Ol_Onal }, + { 2656, PT_SCX, ucp_Ol_Onal }, + { 2661, PT_SCX, ucp_Oriya }, + { 2667, PT_SCX, ucp_Old_Turkic }, + { 2672, PT_SCX, ucp_Oriya }, + { 2677, PT_SCX, ucp_Osage }, + { 2683, PT_SCX, ucp_Osage }, + { 2688, PT_SC, ucp_Osmanya }, + { 2693, PT_SC, ucp_Osmanya }, + { 2701, PT_SCX, ucp_Old_Uyghur }, + { 2706, PT_GC, ucp_P }, + { 2708, PT_SC, ucp_Pahawh_Hmong }, + { 2720, PT_SC, ucp_Palmyrene }, + { 2725, PT_SC, ucp_Palmyrene }, + { 2735, PT_BOOL, ucp_Pattern_Syntax }, + { 2742, PT_BOOL, ucp_Pattern_Syntax }, + { 2756, PT_BOOL, ucp_Pattern_White_Space }, + { 2774, PT_BOOL, ucp_Pattern_White_Space }, + { 2780, PT_SC, ucp_Pau_Cin_Hau }, + { 2785, PT_SC, ucp_Pau_Cin_Hau }, + { 2795, PT_PC, ucp_Pc }, + { 2798, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2802, PT_PC, ucp_Pd }, + { 2805, PT_PC, ucp_Pe }, + { 2808, PT_SCX, ucp_Old_Permic }, + { 2813, PT_PC, ucp_Pf }, + { 2816, PT_SCX, ucp_Phags_Pa }, + { 2821, PT_SCX, ucp_Phags_Pa }, + { 2829, PT_SC, ucp_Inscriptional_Pahlavi }, + { 2834, PT_SCX, ucp_Psalter_Pahlavi }, + { 2839, PT_SC, ucp_Phoenician }, + { 2844, PT_SC, ucp_Phoenician }, + { 2855, PT_PC, ucp_Pi }, + { 2858, PT_SC, ucp_Miao }, + { 2863, PT_PC, ucp_Po }, + { 2866, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2893, PT_SC, ucp_Inscriptional_Parthian }, + { 2898, PT_PC, ucp_Ps }, + { 2901, PT_SCX, ucp_Psalter_Pahlavi }, + { 2916, PT_SCX, ucp_Coptic }, + { 2921, PT_SC, ucp_Inherited }, + { 2926, PT_BOOL, ucp_Quotation_Mark }, + { 2932, PT_BOOL, ucp_Quotation_Mark }, + { 2946, PT_BOOL, ucp_Radical }, + { 2954, PT_BOOL, ucp_Regional_Indicator }, + { 2972, PT_SC, ucp_Rejang }, + { 2979, PT_BOOL, ucp_Regional_Indicator }, + { 2982, PT_SC, ucp_Rejang }, + { 2987, PT_SCX, ucp_Hanifi_Rohingya }, + { 2992, PT_SCX, ucp_Runic }, + { 2998, PT_SCX, ucp_Runic }, + { 3003, PT_GC, ucp_S }, + { 3005, PT_SCX, ucp_Samaritan }, + { 3015, PT_SCX, ucp_Samaritan }, + { 3020, PT_SC, ucp_Old_South_Arabian }, + { 3025, PT_SC, ucp_Saurashtra }, + { 3030, PT_SC, ucp_Saurashtra }, + { 3041, PT_PC, ucp_Sc }, + { 3044, PT_BOOL, ucp_Soft_Dotted }, + { 3047, PT_BOOL, ucp_Sentence_Terminal }, + { 3064, PT_SC, ucp_SignWriting }, + { 3069, PT_SCX, ucp_Sharada }, + { 3077, PT_SCX, ucp_Shavian }, + { 3085, PT_SCX, ucp_Shavian }, + { 3090, PT_SCX, ucp_Sharada }, + { 3095, PT_SC, ucp_Siddham }, + { 3100, PT_SC, ucp_Siddham }, + { 3108, PT_SC, ucp_Sidetic }, + { 3116, PT_SC, ucp_Sidetic }, + { 3121, PT_SC, ucp_SignWriting }, + { 3133, PT_SCX, ucp_Khudawadi }, + { 3138, PT_SCX, ucp_Sinhala }, + { 3143, PT_SCX, ucp_Sinhala }, + { 3151, PT_PC, ucp_Sk }, + { 3154, PT_PC, ucp_Sm }, + { 3157, PT_PC, ucp_So }, + { 3160, PT_BOOL, ucp_Soft_Dotted }, + { 3171, PT_SCX, ucp_Sogdian }, + { 3176, PT_SCX, ucp_Sogdian }, + { 3184, PT_SC, ucp_Old_Sogdian }, + { 3189, PT_SC, ucp_Sora_Sompeng }, + { 3194, PT_SC, ucp_Sora_Sompeng }, + { 3206, PT_SC, ucp_Soyombo }, + { 3211, PT_SC, ucp_Soyombo }, + { 3219, PT_BOOL, ucp_White_Space }, + { 3225, PT_BOOL, ucp_Sentence_Terminal }, + { 3231, PT_SC, ucp_Sundanese }, + { 3236, PT_SC, ucp_Sundanese }, + { 3246, PT_SCX, ucp_Sunuwar }, + { 3251, PT_SCX, ucp_Sunuwar }, + { 3259, PT_SCX, ucp_Syloti_Nagri }, + { 3264, PT_SCX, ucp_Syloti_Nagri }, + { 3276, PT_SCX, ucp_Syriac }, + { 3281, PT_SCX, ucp_Syriac }, + { 3288, PT_SCX, ucp_Tagalog }, + { 3296, PT_SCX, ucp_Tagbanwa }, + { 3301, PT_SCX, ucp_Tagbanwa }, + { 3310, PT_SCX, ucp_Tai_Le }, + { 3316, PT_SC, ucp_Tai_Tham }, + { 3324, PT_SC, ucp_Tai_Viet }, + { 3332, PT_SC, ucp_Tai_Yo }, + { 3338, PT_SCX, ucp_Takri }, + { 3343, PT_SCX, ucp_Takri }, + { 3349, PT_SCX, ucp_Tai_Le }, + { 3354, PT_SC, ucp_New_Tai_Lue }, + { 3359, PT_SCX, ucp_Tamil }, + { 3365, PT_SCX, ucp_Tamil }, + { 3370, PT_SCX, ucp_Tangut }, + { 3375, PT_SC, ucp_Tangsa }, + { 3382, PT_SCX, ucp_Tangut }, + { 3389, PT_SC, ucp_Tai_Viet }, + { 3394, PT_SC, ucp_Tai_Yo }, + { 3399, PT_SCX, ucp_Telugu }, + { 3404, PT_SCX, ucp_Telugu }, + { 3411, PT_BOOL, ucp_Terminal_Punctuation }, + { 3416, PT_BOOL, ucp_Terminal_Punctuation }, + { 3436, PT_SCX, ucp_Tifinagh }, + { 3441, PT_SCX, ucp_Tagalog }, + { 3446, PT_SCX, ucp_Thaana }, + { 3451, PT_SCX, ucp_Thaana }, + { 3458, PT_SCX, ucp_Thai }, + { 3463, PT_SCX, ucp_Tibetan }, + { 3471, PT_SCX, ucp_Tibetan }, + { 3476, PT_SCX, ucp_Tifinagh }, + { 3485, PT_SCX, ucp_Tirhuta }, + { 3490, PT_SCX, ucp_Tirhuta }, + { 3498, PT_SC, ucp_Tangsa }, + { 3503, PT_SCX, ucp_Todhri }, + { 3510, PT_SCX, ucp_Todhri }, + { 3515, PT_SC, ucp_Tolong_Siki }, + { 3526, PT_SC, ucp_Tolong_Siki }, + { 3531, PT_SCX, ucp_Toto }, + { 3536, PT_SCX, ucp_Tulu_Tigalari }, + { 3549, PT_SCX, ucp_Tulu_Tigalari }, + { 3554, PT_SC, ucp_Ugaritic }, + { 3559, PT_SC, ucp_Ugaritic }, + { 3568, PT_BOOL, ucp_Unified_Ideograph }, + { 3574, PT_BOOL, ucp_Unified_Ideograph }, + { 3591, PT_SC, ucp_Unknown }, + { 3599, PT_BOOL, ucp_Uppercase }, + { 3605, PT_BOOL, ucp_Uppercase }, + { 3615, PT_SC, ucp_Vai }, + { 3619, PT_SC, ucp_Vai }, + { 3624, PT_BOOL, ucp_Variation_Selector }, + { 3642, PT_SC, ucp_Vithkuqi }, + { 3647, PT_SC, ucp_Vithkuqi }, + { 3656, PT_BOOL, ucp_Variation_Selector }, + { 3659, PT_SC, ucp_Wancho }, + { 3666, PT_SC, ucp_Warang_Citi }, + { 3671, PT_SC, ucp_Warang_Citi }, + { 3682, PT_SC, ucp_Wancho }, + { 3687, PT_BOOL, ucp_White_Space }, + { 3698, PT_BOOL, ucp_White_Space }, + { 3705, PT_ALNUM, 0 }, + { 3709, PT_BOOL, ucp_XID_Continue }, + { 3714, PT_BOOL, ucp_XID_Continue }, + { 3726, PT_BOOL, ucp_XID_Start }, + { 3731, PT_BOOL, ucp_XID_Start }, + { 3740, PT_SC, ucp_Old_Persian }, + { 3745, PT_PXSPACE, 0 }, + { 3749, PT_SPACE, 0 }, + { 3753, PT_SC, ucp_Cuneiform }, + { 3758, PT_UCNC, 0 }, + { 3762, PT_WORD, 0 }, + { 3766, PT_SCX, ucp_Yezidi }, + { 3771, PT_SCX, ucp_Yezidi }, + { 3778, PT_SCX, ucp_Yi }, + { 3781, PT_SCX, ucp_Yi }, + { 3786, PT_GC, ucp_Z }, + { 3788, PT_SC, ucp_Zanabazar_Square }, + { 3804, PT_SC, ucp_Zanabazar_Square }, + { 3809, PT_SC, ucp_Inherited }, + { 3814, PT_PC, ucp_Zl }, + { 3817, PT_PC, ucp_Zp }, + { 3820, PT_PC, ucp_Zs }, + { 3823, PT_SC, ucp_Common }, + { 3828, PT_SC, ucp_Unknown } }; const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); diff --git a/src/pcre2grep.c b/src/pcre2grep.c index 705e15f..613b350 100644 --- a/src/pcre2grep.c +++ b/src/pcre2grep.c @@ -593,7 +593,7 @@ static char * parse_grep_colors(const char *gc) { static char seq[16]; -char *col; +const char *col; uint32_t len; if (gc == NULL) return NULL; col = strstr(gc, "ms="); @@ -966,7 +966,7 @@ WIN32_FIND_DATA data; #define FILESEP '/' -int +static int isdirectory(char *filename) { DWORD attr = GetFileAttributes(filename); @@ -975,7 +975,7 @@ if (attr == INVALID_FILE_ATTRIBUTES) return (attr & FILE_ATTRIBUTE_DIRECTORY) != 0; } -directory_type * +static directory_type * opendirectory(char *filename) { size_t len; @@ -1009,7 +1009,7 @@ errno = (err == ERROR_ACCESS_DENIED) ? EACCES : ENOENT; return NULL; } -char * +static char * readdirectory(directory_type *dir) { for (;;) @@ -1031,7 +1031,7 @@ return NULL; /* Keep compiler happy; never executed */ #endif } -void +static void closedirectory(directory_type *dir) { FindClose(dir->handle); @@ -1044,7 +1044,7 @@ free(dir); /* I don't know how to do this, or if it can be done; assume all paths are regular if they are not directories. */ -int isregfile(char *filename) +static int isregfile(char *filename) { return !isdirectory(filename); } @@ -1096,17 +1096,17 @@ if (do_colour) #define FILESEP 0 typedef void directory_type; -int isdirectory(char *filename) { return 0; } -directory_type * opendirectory(char *filename) { return (directory_type*)0;} -char *readdirectory(directory_type *dir) { return (char*)0;} -void closedirectory(directory_type *dir) {} +static int isdirectory(char *filename) { return 0; } +static directory_type * opendirectory(char *filename) { return (directory_type*)0;} +static char *readdirectory(directory_type *dir) { return (char*)0;} +static void closedirectory(directory_type *dir) {} /************* Test for regular file when we can't do it **********/ /* Assume all files are regular. */ -int isregfile(char *filename) { return 1; } +static int isregfile(char *filename) { return 1; } /************* Test for a terminal when we can't do it **********/ @@ -1309,7 +1309,7 @@ if (*endptr != 0) /* Error */ { if (longop) { - char *equals = strchr(op->long_name, '='); + const char *equals = strchr(op->long_name, '='); int nlen = (equals == NULL)? (int)strlen(op->long_name) : (int)(equals - op->long_name); fprintf(stderr, "pcre2grep: Malformed number \"%s\" after --%.*s\n", @@ -2208,12 +2208,25 @@ for (; *string != 0; string++) case DDE_CAPTURE: if (value < capture_top) { - PCRE2_SIZE capturesize; + PCRE2_SIZE capturesize, start, end; value *= 2; - capturesize = ovector[value + 1] - ovector[value]; + start = ovector[value]; + end = ovector[value + 1]; + + /* The use of \K may make the end offset earlier than the start. In + this situation, swap them round. */ + + if (start > end) + { + PCRE2_SIZE temp = start; + start = end; + end = temp; + } + + capturesize = end - start; if (capturesize > 0) { - print_match(subject + ovector[value], capturesize); + print_match(subject + start, capturesize); printed = TRUE; } } @@ -2353,7 +2366,12 @@ while (length > 0) if (value < capture_top) { value *= 2; - argslen += ovector[value + 1] - ovector[value]; + + /* The use of \K may make the end offset earlier than the start. */ + + argslen += (ovector[value + 1] > ovector[value])? + ovector[value + 1] - ovector[value] : + ovector[value] - ovector[value + 1]; } argslen--; /* Negate the effect of argslen++ below. */ break; @@ -2419,10 +2437,23 @@ while (length > 0) case DDE_CAPTURE: if (value < capture_top) { - PCRE2_SIZE capturesize; + PCRE2_SIZE capturesize, start, end; value *= 2; - capturesize = ovector[value + 1] - ovector[value]; - memcpy(argsptr, subject + ovector[value], capturesize); + start = ovector[value]; + end = ovector[value + 1]; + + /* The use of \K may make the end offset earlier than the start. In + this situation, swap them round. */ + + if (start > end) + { + PCRE2_SIZE temp = start; + start = end; + end = temp; + } + + capturesize = end - start; + memcpy(argsptr, subject + start, capturesize); argsptr += capturesize; } break; @@ -2847,18 +2878,28 @@ while (ptr < endptr) printname_colon); if (number) fprintf(stdout, "%lu:", linenumber); - /* Handle --line-offsets */ + /* Handle --line-offsets and --file-offsets. The use of \K may make + the end offset earlier than the start. In this situation, swap them + round. */ - if (line_offsets) - fprintf(stdout, "%d,%d" STDOUT_NL, (int)(ptr + offsets[0] - ptr), - (int)(offsets[1] - offsets[0])); + if (line_offsets || file_offsets) + { + PCRE2_SIZE start = offsets[0]; + PCRE2_SIZE end = offsets[1]; - /* Handle --file-offsets */ + if (start > end) + { + PCRE2_SIZE temp = start; + start = end; + end = temp; + } - else if (file_offsets) - fprintf(stdout, "%d,%d" STDOUT_NL, - (int)(filepos + ptr + offsets[0] - ptr), - (int)(offsets[1] - offsets[0])); + if (line_offsets) + fprintf(stdout, "%d,%d" STDOUT_NL, (int)start, (int)(end - start)); + else + fprintf(stdout, "%d,%d" STDOUT_NL, (int)(filepos + start), + (int)(end - start)); + } /* Handle --output (which has already been syntax checked) */ @@ -2881,12 +2922,26 @@ while (ptr < endptr) int n = om->groupnum; if (n == 0 || n < mrc) { - size_t plen = offsets[2*n + 1] - offsets[2*n]; + PCRE2_SIZE start = offsets[2*n]; + PCRE2_SIZE end = offsets[2*n + 1]; + size_t plen; + + /* The use of \K may make the end offset earlier than the start. + In this situation, swap them round. */ + + if (start > end) + { + PCRE2_SIZE temp = start; + start = end; + end = temp; + } + + plen = end - start; if (plen > 0) { if (printed && om_separator != NULL) fprintf(stdout, "%s", om_separator); - print_match(ptr + offsets[n*2], plen); + print_match(ptr + start, plen); printed = TRUE; } } @@ -2910,16 +2965,18 @@ while (ptr < endptr) oldstartoffset = pcre2_get_startchar(match_data); if (startoffset <= oldstartoffset) { - if (startoffset >= length) goto END_ONE_MATCH; /* Were at end */ + if (oldstartoffset >= length) goto END_ONE_MATCH; /* We're at end */ startoffset = oldstartoffset + 1; - if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++; + if (utf) while (startoffset < length && + (ptr[startoffset] & 0xc0) == 0x80) startoffset++; } /* If the current match ended past the end of the line (only possible in multiline mode), we must move on to the line in which it did end - before searching for more matches. */ + before searching for more matches. An offset that is within a line's + terminating CRLF sequence still belongs to that line. */ - while (startoffset > linelength) + while (endlinelength != 0 && startoffset >= linelength + endlinelength) { ptr += linelength + endlinelength; filepos += (int)(linelength + endlinelength); @@ -3080,8 +3137,10 @@ while (ptr < endptr) if (startoffset <= oldstartoffset) { + if (oldstartoffset >= length) break; /* We're at end */ startoffset = oldstartoffset + 1; - if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++; + if (utf) while (startoffset < length && + (ptr[startoffset] & 0xc0) == 0x80) startoffset++; } /* If the current match ended past the end of the line (only possible @@ -3092,11 +3151,20 @@ while (ptr < endptr) while (startoffset > linelength + endlinelength) { - ptr += linelength + endlinelength; - filepos += (int)(linelength + endlinelength); + PCRE2_SIZE lineadvance = linelength + endlinelength; + + if (endprevious < lineadvance) + { + FWRITE_IGNORE(ptr + endprevious, 1, + lineadvance - endprevious, stdout); + endprevious = 0; + } + else endprevious -= lineadvance; + + ptr += lineadvance; + filepos += (int)lineadvance; linenumber++; - startoffset -= (int)(linelength + endlinelength); - endprevious -= (int)(linelength + endlinelength); + startoffset -= lineadvance; t = end_of_line(ptr, endptr, &endlinelength); linelength = t - ptr - endlinelength; length = (PCRE2_SIZE)(endptr - ptr); @@ -3944,6 +4012,7 @@ main(int argc, char **argv) int i, j; int rc = 1; BOOL only_one_at_top; +BOOL options_terminated = FALSE; patstr *cp; fnstr *fn; omstr *om; @@ -3992,6 +4061,7 @@ for (i = 1; i < argc; i++) if (*arg == 0) /* -- terminates options */ { + options_terminated = TRUE; i++; break; /* out of the options-handling loop */ } @@ -4007,8 +4077,8 @@ for (i = 1; i < argc; i++) for (op = optionlist; op->one_char != 0; op++) { - char *opbra = strchr(op->long_name, '('); - char *equals = strchr(op->long_name, '='); + const char *opbra = strchr(op->long_name, '('); + const char *equals = strchr(op->long_name, '='); /* Handle options with only one spelling of the name */ @@ -4261,6 +4331,23 @@ for (i = 1; i < argc; i++) } } +/* GNU grep also recognizes -- after positional arguments. If option parsing +has not already been terminated, remove the first such delimiter. */ + +if (!options_terminated) + { + for (j = i; j < argc; j++) + { + if (strcmp(argv[j], "--") == 0) + { + /* Move the (argc - j - 1) remaining arguments and the terminating NULL */ + memmove(argv + j, argv + j + 1, (argc - j) * sizeof(*argv)); + argc--; + break; + } + } + } + /* Options have been decoded. If -C was used, its value is used as a default for -A and -B. */ diff --git a/src/pcre2test.c b/src/pcre2test.c index 3242b5c..e8b6b14 100644 --- a/src/pcre2test.c +++ b/src/pcre2test.c @@ -150,8 +150,10 @@ patterns. */ /* Not Windows */ #else +#ifdef HAVE_SETRLIMIT #include /* These two includes are needed */ #include /* for setrlimit(). */ +#endif #if defined NATIVE_ZOS /* z/OS uses non-binary I/O */ #define INPUT_MODE "r" #define OUTPUT_MODE "w" @@ -227,7 +229,6 @@ claim to be C99 don't support it (hence DISABLE_PERCENT_ZT). */ #define PATSTACKSIZE 20 /* Pattern stack for save/restore testing */ #define REPLACE_MODSIZE 100 /* Field for reading 8-bit replacement */ #define SUBSTITUTE_SUBJECT_MODSIZE 100 /* Field for reading 8-bit subject for substitute */ -#define VERSION_SIZE 64 /* Size of buffer for the version strings */ #define REPLACE_BUFFSIZE 256 /* Code units for replacement buffer */ /* Default JIT compile options */ @@ -2025,12 +2026,23 @@ for (;;) char promptbuf[80]; int snprintf_rc; char *s; - if (should_print_colour(clr_prompt, stdout) && - (snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), "\x1b[%dm%s\x1b[0m", clr_prompt, prompt)) > 0 && - snprintf_rc < (int)sizeof(promptbuf)) - s = readline(promptbuf); + if (should_print_colour(clr_prompt, stdout)) + /* libedit cannot handle ANSI escapes as the final character of a prompt, + so we ensure a trailing space comes after the last escape. */ + snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), + "%c\x1b[%dm%c%s%c\x1b[0m%c ", + RL_PROMPT_START_IGNORE, clr_prompt, + RL_PROMPT_END_IGNORE, prompt, + RL_PROMPT_START_IGNORE, + RL_PROMPT_END_IGNORE); else - s = readline(prompt); + snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), "%s ", prompt); + if (snprintf_rc <= 0 || snprintf_rc >= (int)sizeof(promptbuf)) + { + cfprintf(clr_test_error, outfile, "** Interactive prompt exceeds buffer space\n"); + exit(1); + } + s = readline(promptbuf); if (s == NULL) return (here == start)? NULL : start; dlen = strlen(s); if (dlen > rlen - 2) @@ -2942,9 +2954,9 @@ static int pcre2_config(uint32_t what, void *where) DISPATCH(return, pcre2_config_, (what, where)); } -static void config_str(uint32_t what, char *where) +static char *config_str(uint32_t what) { -DISPATCH(, config_str_, (what, where)); +DISPATCH(return, config_str_, (what)); } static BOOL decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl) @@ -3013,14 +3025,14 @@ DISPATCH(, unittest_, ()); static void print_version(FILE *f, BOOL include_mode) { -char buf[VERSION_SIZE]; -config_str(PCRE2_CONFIG_VERSION, buf); +char *buf = config_str(PCRE2_CONFIG_VERSION); fprintf(f, "PCRE2 version %s", buf); if (include_mode) { fprintf(f, " (%d-bit)", test_mode); } fprintf(f, "\n"); +free(buf); } @@ -3032,9 +3044,9 @@ fprintf(f, "\n"); static void print_unicode_version(FILE *f) { -char buf[VERSION_SIZE]; -config_str(PCRE2_CONFIG_UNICODE_VERSION, buf); +char *buf = config_str(PCRE2_CONFIG_UNICODE_VERSION); fprintf(f, "Unicode version %s", buf); +free(buf); } @@ -3046,9 +3058,9 @@ fprintf(f, "Unicode version %s", buf); static void print_jit_target(FILE *f) { -char buf[VERSION_SIZE]; -config_str(PCRE2_CONFIG_JITTARGET, buf); +char *buf = config_str(PCRE2_CONFIG_JITTARGET); fputs(buf, f); +free(buf); } @@ -3634,6 +3646,218 @@ display_selected_modifiers(FALSE, "SUBJECT"); +/************************************************* +* Helpers for the grep test scripts * +*************************************************/ + +/* RunGrepTest and RunGrepTest.bat have to create input files that contain +exact byte sequences, including bytes that cannot start a UTF-8 character, and +they also have to filter a stream, changing one byte value into another. On +Unix-like systems printf(1) and tr(1) do this, but Windows has no dependable +equivalent: the obvious candidates all translate what they write according to +the current code page, which mangles any byte greater than 0x7f. As both +scripts are checked against the same expected output, they need the same +facilities, so these options provide just enough of printf and tr for +RunGrepTest.bat to produce exactly the same bytes as RunGrepTest does. + +They are needed only by RunGrepTest.bat, so they are built only on Windows. +They are deliberately undocumented, are not part of pcre2test's interface, and +may change whenever the test scripts need something different. */ + +#if defined(_WIN32) || defined(WIN32) + +/* Standard input and output are put into binary mode, because the Windows +default is to turn every LF that passes through into CRLF. */ + +static void +helper_binary_io(void) +{ +_setmode(_fileno(stdin), _O_BINARY); +_setmode(_fileno(stdout), _O_BINARY); +} + + +/* Decode an argument that represents a single byte, either as itself or as a +backslash followed by up to three octal digits. The result is the byte value, +or -1 if the argument is not one of those things. */ + +static int +helper_byte(const char *s) +{ +if (s[0] == '\\' && s[1] >= '0' && s[1] <= '7') + { + int value = 0; + int i = 0; + int n = 0; + while (n < 3 && s[i+1] >= '0' && s[i+1] <= '7') + { + value = value * 8 + (s[++i] - '0'); + n++; + } + return (s[i+1] == 0 && value <= 255)? value : -1; + } + +return (s[0] != 0 && s[1] == 0)? (unsigned char)s[0] : -1; +} + + +/* Write the format argument to the standard output, interpreting the escape +sequences that the test scripts use, and replacing every occurrence of %s with +the second argument. The escapes are \n, \r, \\ and an octal escape of up to +three digits. Anything else is written out unchanged, backslash and all, but +the scripts should not rely on that: a literal backslash, as in a Windows file +name, is written as \\ so that the format does not depend on which escapes +happen to be implemented here. */ + +static int +helper_printf(int argc, char **argv) +{ +const char *fmt; +const char *arg; +size_t i; + +if (argc < 1) + { + fprintf(stderr, "pcre2test: -printf needs a format argument\n"); + return 1; + } + +fmt = argv[0]; +arg = (argc > 1)? argv[1] : ""; + +helper_binary_io(); + +for (i = 0; fmt[i] != 0; i++) + { + if (fmt[i] == '%' && fmt[i+1] == 's') + { + fputs(arg, stdout); + i++; + } + + /* An octal escape of up to three digits, so that \0 gives a binary zero and + \200 gives a byte that cannot start a UTF-8 character. */ + + else if (fmt[i] == '\\' && fmt[i+1] >= '0' && fmt[i+1] <= '7') + { + int value = 0; + int n = 0; + while (n < 3 && fmt[i+1] >= '0' && fmt[i+1] <= '7') + { + value = value * 8 + (fmt[++i] - '0'); + n++; + } + if (value > 255) + { + fprintf(stderr, "pcre2test: -printf octal escape is greater than \\377\n"); + return 1; + } + fputc(value, stdout); + } + + else if (fmt[i] == '\\' && fmt[i+1] == 'n') { fputc('\n', stdout); i++; } + else if (fmt[i] == '\\' && fmt[i+1] == 'r') { fputc('\r', stdout); i++; } + else if (fmt[i] == '\\' && fmt[i+1] == '\\') { fputc('\\', stdout); i++; } + else fputc(fmt[i], stdout); + } + +if (fflush(stdout) != 0) + { + fprintf(stderr, "pcre2test: -printf write failed: %s\n", strerror(errno)); + return 1; + } + +return 0; +} + + +/* Copy the standard input to the standard output, changing every occurrence of +one byte value into another. Both bytes are given in the form that helper_byte() +accepts. */ + +static int +helper_tr(int argc, char **argv) +{ +int from, to, c; + +if (argc < 2) + { + fprintf(stderr, "pcre2test: -tr needs two arguments\n"); + return 1; + } + +from = helper_byte(argv[0]); +to = helper_byte(argv[1]); + +if (from < 0 || to < 0) + { + fprintf(stderr, "pcre2test: -tr arguments must each be a single byte\n"); + return 1; + } + +helper_binary_io(); + +while ((c = getchar()) != EOF) putchar((c == from)? to : c); + +if (ferror(stdin) || fflush(stdout) != 0) + { + fprintf(stderr, "pcre2test: -tr copy failed: %s\n", strerror(errno)); + return 1; + } + +return 0; +} + + + +/* Copy the standard input to the standard output, changing every occurrence of +the three bytes CR, CR, LF into the two bytes CR, LF. + +pcre2grep ends each line that it writes with STDOUT_NL, which is CRLF on +Windows but LF elsewhere, so a line whose own text ends with CR comes out as +CR CR LF on Windows and as CR LF everywhere else. Comparison normally copes +with the difference between the two line endings, but not with the extra CR +that this case produces. Both test scripts are checked against the same +expected output, so RunGrepTest.bat passes the output of the few tests that +match a CR at the end of a line through this, and leaves everything else alone. +A run of CRs that is not at the end of a line is not touched, so a CR that the +pattern matched in the middle of a line still shows up. */ + +static int +helper_fixcrlf(void) +{ +unsigned long crcount = 0; +int c; + +helper_binary_io(); + +while ((c = getchar()) != EOF) + { + if (c == '\r') { crcount++; continue; } + + /* A run of CRs that ends the line has one CR removed; any other run is + written out unchanged. */ + + if (c == '\n' && crcount >= 2) crcount--; + while (crcount > 0) { putchar('\r'); crcount--; } + putchar(c); + } + +while (crcount > 0) { putchar('\r'); crcount--; } + +if (ferror(stdin) || fflush(stdout) != 0) + { + fprintf(stderr, "pcre2test: -fixcrlf copy failed: %s\n", strerror(errno)); + return 1; + } + +return 0; +} + +#endif /* Windows */ + + + /************************************************* * Main Program * *************************************************/ @@ -3651,6 +3875,19 @@ BOOL skipping_endif = FALSE; char *arg_subject = NULL; char *arg_pattern = NULL; char *arg_error = NULL; +char *env_no_color = getenv("NO_COLOR"); + +/* The undocumented helpers for the grep test scripts do none of the work that +follows, so deal with them before anything is set up. */ + +#if defined(_WIN32) || defined(WIN32) +if (argc > 2 && strcmp(argv[1], "-printf") == 0) + return helper_printf(argc - 2, argv + 2); +if (argc > 2 && strcmp(argv[1], "-tr") == 0) + return helper_tr(argc - 2, argv + 2); +if (argc == 2 && strcmp(argv[1], "-fixcrlf") == 0) + return helper_fixcrlf(); +#endif /* Get buffers from malloc() so that valgrind will check their misuse when debugging. They grow automatically when very long lines are read. The 16- @@ -3675,6 +3912,9 @@ locale_name[0] = 0; patctl_zero(&def_patctl); datctl_zero(&def_datctl); +if (env_no_color != NULL && strlen(env_no_color) > 0) + colour_setting = COLOUR_NEVER; + /* Scan command line options. */ while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0) @@ -3773,7 +4013,12 @@ while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0) else if (strcmp(arg, "-S") == 0 && argc > 2 && ((uli = strtoul(argv[op+1], &endptr, 10)), *endptr == 0)) { -#if defined(_WIN32) || defined(WIN32) || defined(__HAIKU__) || defined(NATIVE_ZOS) || defined(__VMS) + /* On Win32, we exclude setrlimit() regardless of whether it may have been detected + due to some Unix emulation environment. On Haiku and z/OS, setrlimit() is reported + to be detected (with the function linking successfully and RLIMIT_STACK defined in + the headers), but it does not actually work, so we exclude it as well. */ +#if defined(_WIN32) || defined(WIN32) || !defined(HAVE_SETRLIMIT) || \ + defined(__HAIKU__) || defined(NATIVE_ZOS) cfprintf(clr_test_error, stderr, "pcre2test: -S is not supported on this OS\n"); exit(1); #else @@ -4059,7 +4304,7 @@ while (notdone) expectdata |= preg.re_pcre2_code != NULL; #endif - if (extend_inputline(infile, buffer, expectdata? "data> " : " re> ") == NULL) + if (extend_inputline(infile, buffer, expectdata? "data>" : " re>") == NULL) break; /* Pre-process input lines with #if...#endif. */ diff --git a/src/pcre2test_inc.h b/src/pcre2test_inc.h index 8124e9c..69c64f7 100644 --- a/src/pcre2test_inc.h +++ b/src/pcre2test_inc.h @@ -558,24 +558,47 @@ return 0; Arguments: what the item to read - where the 8-bit buffer to receive the string + +Returns: a buffer which must be freed by the caller, where the string has + been written */ -static void -config_str(uint32_t what, char *where) +static char * +config_str(uint32_t what) { -int r1, r2; -PCRE2_UCHAR buf[VERSION_SIZE]; +int r2; +PCRE2_UCHAR *buf; +char *buf8; +int needed_len; -r1 = pcre2_config(what, NULL); -r2 = pcre2_config(what, buf); -if (r1 < 0 || r1 != r2 || r1 >= VERSION_SIZE) +needed_len = pcre2_config(what, NULL); +if (needed_len <= 0) { cfprintf(clr_test_error, stderr, "pcre2test: Error in pcre2_config(%d)\n", what); exit(1); } -while (r1-- > 0) where[r1] = (char)buf[r1]; +buf = malloc((unsigned)needed_len * sizeof(PCRE2_UCHAR)); +buf8 = malloc((unsigned)needed_len); +if (buf == NULL || buf8 == NULL) + { + cfprintf(clr_test_error, stderr, "pcre2test: malloc failed in config_str()\n"); + exit(1); + } + +r2 = pcre2_config(what, buf); +if (r2 != needed_len) + { + cfprintf(clr_test_error, stderr, + "pcre2test: pcre2_config(%d) returned %d, expected %d\n", + what, r2, needed_len); + exit(1); + } + +while (r2-- > 0) buf8[r2] = (char)buf[r2]; +free(buf); + +return buf8; } @@ -1028,13 +1051,18 @@ for (;;) break; case MOD_STR: + if (m->value > (uint32_t)(UINT8_MAX) + 1) + { + cfprintf(clr_test_error, stderr, "pcre2test: mod %s size > 256 \n", m->name); + exit(1); + } if (len + 1 > m->value) { cfprintf(clr_test_error, outfile, "** Overlong value for \"%s\" (max %d code units)\n", m->name, m->value - 1); return FALSE; } - ((uint8_t *)field)[0] = len; + ((uint8_t *)field)[0] = (uint8_t)len; /* len <= m->value - 1 <= UINT8_MAX */ memcpy(((uint8_t *)field)+1, pp, len); ((uint8_t *)field)[len+1] = 0; pp = ep; @@ -1684,7 +1712,7 @@ process_command(void) FILE *f; PCRE2_SIZE serial_size; size_t i; -int rc, cmd, yield; +int rc, cmd, yield, config_value; uint16_t first_listed_newline; const char *cmdname; size_t cmdlen; @@ -1952,7 +1980,7 @@ switch(cmd) { size_t optlen = strlen(coptlist[i].name); const uint8_t *argptr_trail; - if (coptlist[i].type != CONF_FIX) + if (coptlist[i].type != CONF_FIX && coptlist[i].type != CONF_INT) continue; if (strncmp((const char*)argptr, coptlist[i].name, optlen) != 0) continue; @@ -1967,9 +1995,20 @@ switch(cmd) return PR_ABEND; } - /* Condition FALSE - skip this line and everything until #endif. */ - if ((coptlist[i].value != 0) == if_inverted) + if (coptlist[i].type == CONF_FIX) + { + config_value = coptlist[i].value; + } + else /* if (coptlist[i].type == CONF_INT) */ + { + (void)pcre2_config(coptlist[i].value, &config_value); + } + + if ((config_value != 0) == if_inverted) + { + /* Condition FALSE - skip this line and everything until #endif. */ yield = PR_ENDIF; + } inside_if = TRUE; break; @@ -2019,6 +2058,9 @@ uint32_t use_forbid_utf = forbid_utf; PCRE2_SIZE patlen, full_patlen; PCRE2_SIZE valgrind_access_length; PCRE2_SIZE erroroffset; +int32_t serialize_rc; +uint8_t *serialized_bytes; +PCRE2_SIZE serialized_size; /* The perltest.sh script supports only / as a delimiter. */ @@ -2966,6 +3008,28 @@ if ((pat_patctl.control2 & CTL2_NL_SET) != 0) rc = show_pattern_info(); if (rc != PR_OK) return rc; +/* Verify that the compiled structure can be serialized without generating +memory errors. */ + +serialize_rc = pcre2_serialize_encode((const pcre2_code **)&compiled_code, 1, + &serialized_bytes, &serialized_size, general_context); +if (serialize_rc != 1) + { + cfprintf(clr_test_error, outfile, "** pcre2_serialize_encode() returned %d instead of 1\n", + serialize_rc); + return PR_ABEND; + } + +#if defined SUPPORT_VALGRIND +if (VALGRIND_CHECK_MEM_IS_DEFINED(serialized_bytes, serialized_size) != 0) + { + cfprintf(clr_test_error, outfile, "** pcre2_serialize_encode() returned undefined data\n"); + return PR_ABEND; + } +#endif + +pcre2_serialize_free(serialized_bytes); + /* The "push" control requests that the compiled pattern be remembered on a stack. This is mainly for testing the serialization functionality. */ @@ -3101,7 +3165,8 @@ for (;;) dat_context, dfa_workspace, DFA_WS_DIMENSION); } - else if ((pat_patctl.control & CTL_JITFAST) != 0) + else if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) capcount = pcre2_jit_match(compiled_code, pp, ulen, dat_datctl.offset, dat_datctl.options, match_data, dat_context); @@ -4683,7 +4748,8 @@ if (dat_datctl.replacement[0] != MOD_STR_UNSET) dat_datctl.offset, dat_datctl.options, match_data, use_dat_context, dfa_workspace, DFA_WS_DIMENSION); } - else if ((pat_patctl.control & CTL_JITFAST) != 0) + else if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) { (void)pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, dat_datctl.options, match_data, use_dat_context); @@ -4926,7 +4992,7 @@ for (gmatched = 0;; gmatched++) /* When matching is via pcre2_match(), we will detect the use of JIT via the stack callback function. */ - jit_was_used = (pat_patctl.control & CTL_JITFAST) != 0; + jit_was_used = FALSE; /* Do timing if required. */ @@ -4957,7 +5023,8 @@ for (gmatched = 0;; gmatched++) } } - else if ((pat_patctl.control & CTL_JITFAST) != 0) + else if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) { start_time = clock(); for (i = 0; i < timeitm; i++) @@ -5041,9 +5108,11 @@ for (gmatched = 0;; gmatched++) } else { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); + if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) + capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, + dat_datctl.offset, dat_datctl.options | g_notempty, match_data, + use_dat_context); else capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, dat_datctl.options | g_notempty, match_data, use_dat_context); @@ -5078,12 +5147,15 @@ for (gmatched = 0;; gmatched++) } else { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); + if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) + capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, + dat_datctl.offset, dat_datctl.options | g_notempty, match_data, + use_dat_context); else - capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); + capcount = pcre2_match(compiled_code, pp, arg_ulen, + dat_datctl.offset, dat_datctl.options | g_notempty, match_data, + use_dat_context); } mallocs_until_failure = INT_MAX; @@ -5143,23 +5215,39 @@ for (gmatched = 0;; gmatched++) return PR_ABEND; } + /* tracking JIT with jitverify needs a context, but in cases where one + wasn't available, can fallback to the match_data status */ + + if ((dat_datctl.control & CTL_NULLCONTEXT) != 0 && + (pat_patctl.control & CTL_JITVERIFY) != 0) + jit_was_used = match_data->matchedby == PCRE2_MATCHEDBY_JIT; + /* If PCRE2_COPY_MATCHED_SUBJECT was set, check that things are as they should be, but not for fast JIT, where it isn't supported. */ - if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0 && - (pat_patctl.control & CTL_JITFAST) == 0) + if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0) { - if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: flag not set after copy_matched_subject\n"); + if ((pat_patctl.control & CTL_JITFAST) != 0 && + (dat_datctl.options & PCRE2_NO_JIT) == 0) + { + if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0) + cfprintf(clr_test_error, outfile, + "** PCRE2 error: flag set after unsupported copy_matched_subject\n"); + } + else + { + if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0) + cfprintf(clr_test_error, outfile, + "** PCRE2 error: flag not set after copy_matched_subject\n"); - if (match_data->subject == pp) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject has not copied\n"); + if (match_data->subject == pp) + cfprintf(clr_test_error, outfile, + "** PCRE2 error: copy_matched_subject has not copied\n"); - if (memcmp(match_data->subject, pp, ulen) != 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject mismatch\n"); + if (memcmp(match_data->subject, pp, ulen) != 0) + cfprintf(clr_test_error, outfile, + "** PCRE2 error: copy_matched_subject mismatch\n"); + } } /* If this is not the first time round a global loop, check that the @@ -5636,6 +5724,9 @@ pcre2_match_context *test_dat_context = NULL, *test_dat_context_copy = NULL; pcre2_convert_context *test_con_context = NULL, *test_con_context_copy = NULL; pcre2_match_data *test_match_data = NULL; pcre2_code *test_compiled_code = NULL; +#ifdef SUPPORT_JIT +BOOL test_compiled_with_jit = FALSE; +#endif PCRE2_UCHAR pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 }; PCRE2_UCHAR callout_int_pattern[] = { CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_RIGHT_PARENTHESIS, 0 }; @@ -5940,11 +6031,56 @@ ASSERT(rc == 0 && sizeval == 0, "pcre2_pattern_info(JIT)"); if (pcre2_jit_compile(test_compiled_code, PCRE2_JIT_COMPLETE) == 0) { + test_compiled_with_jit = TRUE; + rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval); ASSERT(rc == 0 && sizeval > 0, "pcre2_pattern_info(JIT after compile)"); } #endif +/* ----------------------- Matching functions ------------------------------ */ + +#ifdef SUPPORT_JIT + +if (test_compiled_with_jit) + { + +/* Check that fast JIT releases a copied subject when reusing match data. */ + + test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, + test_gen_context); + ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern(JIT)"); + + rc = pcre2_match(test_compiled_code, pattern, 3, 0, + PCRE2_COPY_MATCHED_SUBJECT, test_match_data, NULL); + ASSERT(rc == 1, "pcre2_match(COPY_MATCHED_SUBJECT)"); + + rc = pcre2_jit_match(test_compiled_code, subject_abcz, 4, 0, 0, + test_match_data, NULL); + ASSERT(rc == 1, "pcre2_jit_match(reused match data)"); + + pcre2_match_data_free(test_match_data); + test_match_data = NULL; + +/* Check that fast JIT ignores PCRE2_NO_JIT */ + + test_match_data = pcre2_match_data_create(100000, test_gen_context); + ASSERT(test_match_data != NULL, "pcre2_match_data_create(100000)"); + ASSERT(pcre2_get_ovector_count(test_match_data) == 65535, + "pcre2_get_ovector_count(UINT32_MAX) <= UINT16_MAX)"); + + rc = pcre2_jit_match(test_compiled_code, subject_abcz, 4, 0, PCRE2_NO_JIT, + test_match_data, NULL); + ASSERT(rc == 1 && (test_match_data->matchedby == PCRE2_MATCHEDBY_JIT), + "pcre2_jit_match(ignore PCRE2_NO_JIT"); + + pcre2_match_data_free(test_match_data); + test_match_data = NULL; + + } + +#endif + /* ----------------------- POSIX functions --------------------------------- */ #if PCRE2_CODE_UNIT_WIDTH == 8 @@ -6244,6 +6380,118 @@ rc = pcre2_substitute(subs_other_code, substitute_subject, NULL, 0, replace_buf, &sizeval); ASSERT(rc == PCRE2_ERROR_DIFFSUBSPATTERN, "pcre2_substitute(pattern)"); +/* -------------- pcre2_serialize_decode: three goto cleanup branches -------- */ + +{ + pcre2_code *serialize_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, + 0, &errorcode, &erroroffset, NULL); + uint8_t *serialized_bytes = NULL; + PCRE2_SIZE serialized_size = 0; + pcre2_code *decode_codes[1] = { NULL }; + + ASSERT(serialize_code != NULL, "serialize setup"); + rc = pcre2_serialize_encode((const pcre2_code **)&serialize_code, 1, + &serialized_bytes, &serialized_size, NULL); + pcre2_code_free(serialize_code); + ASSERT(rc == 1 && serialized_bytes != NULL, "serialize setup"); + + /* goto 1: blocksize <= sizeof(pcre2_real_code) */ + { + size_t blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH + + offsetof(pcre2_real_code, blocksize); + uint8_t saved_blocksize[sizeof(PCRE2_SIZE)]; + memcpy(saved_blocksize, serialized_bytes + blocksize_offset, + sizeof(saved_blocksize)); + memset(serialized_bytes + blocksize_offset, 0, sizeof(PCRE2_SIZE)); + + rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL); + ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA && + decode_codes[0] == NULL, "pcre2_serialize_decode(bad blocksize)"); + + memcpy(serialized_bytes + blocksize_offset, saved_blocksize, + sizeof(saved_blocksize)); + } + + /* goto 2: dst_re malloc failure */ + mallocs_until_failure = 2; + { + pcre2_general_context *serialize_test_context = + pcre2_general_context_create(&my_malloc, &my_free, NULL); + ASSERT(serialize_test_context != NULL, "general_context for serialize test"); + rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, + serialize_test_context); + ASSERT(rc == PCRE2_ERROR_NOMEMORY && decode_codes[0] == NULL, + "pcre2_serialize_decode(malloc failure)"); + mallocs_until_failure = INT_MAX; + pcre2_general_context_free(serialize_test_context); + } + + /* goto 3: magic_number / name_entry_size / name_count validation */ + { + size_t off = sizeof(pcre2_serialized_data) + TABLES_LENGTH + + offsetof(pcre2_real_code, magic_number); + uint8_t saved[4]; + memcpy(saved, serialized_bytes + off, 4); + memset(serialized_bytes + off, 0, 4); + + decode_codes[0] = NULL; + rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL); + memcpy(serialized_bytes + off, saved, 4); + ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA && + decode_codes[0] == NULL, "pcre2_serialize_decode(goto 3)"); + } + + /* Regression: avoid stale dst_re double free on later iteration failure. */ + { + pcre2_code *multi_codes[2]; + pcre2_code *multi_decode_codes[2] = { NULL, NULL }; + uint8_t *multi_serialized_bytes = NULL; + PCRE2_SIZE multi_serialized_size = 0; + CODE_BLOCKSIZE_TYPE first_blocksize; + size_t first_blocksize_offset = sizeof(pcre2_serialized_data) + + TABLES_LENGTH + offsetof(pcre2_real_code, blocksize); + size_t second_blocksize_offset; + uint8_t saved_second_blocksize[sizeof(CODE_BLOCKSIZE_TYPE)]; + + multi_codes[0] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0, + &errorcode, &erroroffset, NULL); + multi_codes[1] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0, + &errorcode, &erroroffset, NULL); + ASSERT(multi_codes[0] != NULL && multi_codes[1] != NULL, + "serialize setup (multi-code compile)"); + + rc = pcre2_serialize_encode((const pcre2_code **)multi_codes, 2, + &multi_serialized_bytes, &multi_serialized_size, NULL); + pcre2_code_free(multi_codes[0]); + pcre2_code_free(multi_codes[1]); + ASSERT(rc == 2 && multi_serialized_bytes != NULL, + "serialize setup (multi-code encode)"); + + memcpy(&first_blocksize, multi_serialized_bytes + first_blocksize_offset, + sizeof(first_blocksize)); + second_blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH + + first_blocksize + offsetof(pcre2_real_code, blocksize); + + memcpy(saved_second_blocksize, + multi_serialized_bytes + second_blocksize_offset, + sizeof(saved_second_blocksize)); + memset(multi_serialized_bytes + second_blocksize_offset, 0, + sizeof(saved_second_blocksize)); + + rc = pcre2_serialize_decode(multi_decode_codes, 2, multi_serialized_bytes, + NULL); + memcpy(multi_serialized_bytes + second_blocksize_offset, + saved_second_blocksize, sizeof(saved_second_blocksize)); + ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA && + multi_decode_codes[0] == NULL && multi_decode_codes[1] == NULL, + "pcre2_serialize_decode(regression stale dst_re)"); + + pcre2_serialize_free(multi_serialized_bytes); + } + + pcre2_serialize_free(serialized_bytes); +} + /* ------------------------------------------------------------------------- */ #undef ASSERT diff --git a/testdata/grepoutput b/testdata/grepoutput index 13b0c7d..3c8b2f4 100644 --- a/testdata/grepoutput +++ b/testdata/grepoutput @@ -1205,6 +1205,15 @@ RC=2 ---------------------------- Test 147 ----------------------------- pcre2grep: Failed to open -nonfile: No such file or directory RC=2 +C123D +RC=0 +testtemp1grep:A123B +-testtemp1grep:C123D +RC=0 +A123B +RC=0 +E123F +RC=0 ---------------------------- Test 148 ----------------------------- pcre2grep: Unknown option --nonexist Usage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files] @@ -1330,3 +1339,12 @@ RC=0 631-ghj 632-jkl RC=0 +---------------------------- Test 161 ----------------------------- +foo +RC=0 +foo +RC=0 +1:1,3 +RC=0 +1,3 +RC=0 diff --git a/testdata/grepoutput8 b/testdata/grepoutput8 index 68bc765..bc34d8e 100644 --- a/testdata/grepoutput8 +++ b/testdata/grepoutput8 @@ -45,3 +45,130 @@ RC=0 ---------------------------- Test U10 ------------------------------ A1 RC=0 +---------------------------- Test U11 ------------------------------ +x +only-matching RC=0 +€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€x +multiline RC=0 +€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€x +colour RC=0 +---------------------------- Test U12 ------------------------------ +1:abc +colour-empty-at-end RC=0 +1:abc +colour-nonempty-then-empty RC=0 +1:abc +colour-empty-at-start RC=0 +1: +2:abc +colour-empty-line RC=0 +1:abc +colour-no-final-newline RC=0 +1:a +2:b +multiline-empty-at-line-end RC=0 +1:a +2:b +multiline-empty-at-line-start RC=0 +1:a +2:b +multiline-nonempty-then-empty RC=0 +1:a +b +c +multiline-spanning RC=0 +1:a +b +c +4:d +multiline-spanning-then-empty RC=0 +1:a +b +c +4:d +multiline-colour-spanning RC=0 +1:x€€y +colour-utf-scan-to-char RC=0 +1:x€€y +multiline-utf-scan-to-char RC=0 +1:x€€ +colour-utf-scan-to-newline RC=0 +1:x€€ +multiline-utf-scan-to-newline RC=0 +1:x€€ +colour-utf-scan-to-end RC=0 +1:x€€ +multiline-utf-scan-to-end RC=0 +1:€€ +colour-utf-only-continuations RC=0 +1:€€ +multiline-utf-only-continuations RC=0 +1:a +2:b +3: +€€ +multiline-utf-trailing RC=0 +1:a +2:b +3: +€€ +multiline-utf-trailing-empty RC=0 +1:a +b +3: +€€ +multiline-colour-utf-trailing-spanning RC=0 +---------------------------- Test U13 ------------------------------ +1:abc +colour-bsk RC=0 +1:a +2:b +multiline-bsk RC=0 +1:x€€y +colour-bsk-utf-scan-to-char RC=0 +1:x€€ +multiline-bsk-utf-scan-to-end RC=0 +1:a +2:x€€ +multiline-colour-bsk-utf-trailing RC=0 +---------------------------- Test U14 ------------------------------ +1:ab +1:ab +control-progress RC=0 +1: +empty-at-end RC=0 +1: +empty-at-start RC=0 +1:a +1:b +1:c +1:a +1:b +1:c +bsk-restart RC=0 +1:x +1:y +bsk-utf-scan-to-char RC=0 +1:x +bsk-utf-scan-to-newline RC=0 +1:x +bsk-utf-scan-to-end RC=0 +1:ab + +multiline-line-boundary RC=0 +1:ab +cd +ef +multiline-spanning RC=0 +1: +multiline-empty RC=0 +crlf-not-multiline RC=1 +1: +1: +crlf-mid-terminator RC=0 +1: +2: +any-mid-terminator RC=0 +1:2,1 +1:6,1 +crlf-mid-terminator-line-offsets RC=0 diff --git a/testdata/testinput10 b/testdata/testinput10 index c4ee276..d9e6ba8 100644 --- a/testdata/testinput10 +++ b/testdata/testinput10 @@ -585,6 +585,14 @@ AAA\x80BXYZ AAA\x80BBXYZ +/(?<=(.))/utf,match_invalid_utf + x\x80 + \x{10000}\x80 + +/\b./utf,match_invalid_utf + \x{10000}s + \xf0s + # ------------------------------------- /(*UTF)(?=\x{123})/I diff --git a/testdata/testinput12 b/testdata/testinput12 index c618f02..01cc76a 100644 --- a/testdata/testinput12 +++ b/testdata/testinput12 @@ -498,6 +498,15 @@ /(..)(*scs:(1)ab$)/match_invalid_utf ab\x{df00}cde +/(?<=(.))/utf,match_invalid_utf + x\x{d800} + \x{10000}\x{dc00} + +/\b./utf,match_invalid_utf + \x{10000}s + \x{d800}s + \x{dc00}s + # ---------------------------------------------------- /(*UTF)(?=\x{123})/I diff --git a/testdata/testinput17 b/testdata/testinput17 index 08fd72e..a02e6be 100644 --- a/testdata/testinput17 +++ b/testdata/testinput17 @@ -295,11 +295,29 @@ /abc/ abc abc\=no_jit - + +/(*NO_JIT)abc/ + abc + /abc/jitfast abc abc\=no_jit - + +/(*NO_JIT)abc/jitfast +\= Expect error + abc + +# Do not leak a previously copied subject with jitfast (#920) + +/abc/jitfast + abc\=copy_matched_subject,no_jit + abc + +/abc/jitfast + abc\=copy_matched_subject + abc\=null_context + abc\=null_context,no_jit + # ---- /[aC]/mg,firstline,newline=lf @@ -335,4 +353,14 @@ zabcz\=callout_error=1 zabcz\=callout_error=1,substitute_matched +# Check UTF validation when falling back from a partially-compiled JIT pattern +# to the interpreter + +#if unicode + +/\b/B,utf,ucp,jit=1 + \xff\x00\x00\=offset=2,ps + +#endif + # End of testinput17 diff --git a/testdata/testinput2 b/testdata/testinput2 index 65e88bc..413214c 100644 --- a/testdata/testinput2 +++ b/testdata/testinput2 @@ -3987,6 +3987,10 @@ /^A\x{/ +/\x{2/ + +/\o{7/ + /[ab]++/B,no_auto_possess /[^ab]*+/B,no_auto_possess @@ -7396,6 +7400,16 @@ a)"xI /[z&/alt_extended_class +/(?<=[12[34]])/alt_extended_class + 1 + 2 + 3 + 4 + 1] +\= Expect no match + 5 + [] + /[[^]~~[^]]/B,alt_extended_class,allow_empty_class \= Expect no match a @@ -7403,6 +7417,18 @@ a)"xI /[^[[^]~~[^]]]/B,alt_extended_class,allow_empty_class a +/[\d--1].(?BAR)?/substitute_extended,replace=X${Bar:+\:\:text}Y + foo + fooBAR + +# -------------- +# Tests for substitution with partial +# -------------- + +/(a)b+/ +\= Expect to fail with "bad option" + ab\=ph,replace=FOO +\= Expect to fail with "partial match" + ab\=ph,substitute_replacement_only,replace=FOO +\= Expect success + abc\=ph,substitute_replacement_only,replace=FOO + zabc\=ph,substitute_replacement_only,replace=>$&|$1|$`< +\= Expect to fail with PCRE2_ERROR_PARTIALSUBS + abc\=ph,substitute_replacement_only,replace=>$_< + abc\=ph,substitute_replacement_only,replace=>$'< + +/(a)b+/ +\= Expect to fail with "bad option" + ab\=ps,replace=FOO +\= Expect to fail with "partial match" + a\=ps,substitute_replacement_only,replace=FOO +\= Expect success + ab\=ps,substitute_replacement_only,replace=FOO + abc\=ps,substitute_replacement_only,replace=FOO + zabc\=ps,substitute_replacement_only,replace=>$&|$1|$`< +\= Expect to fail with PCRE2_ERROR_PARTIALSUBS + abc\=ps,substitute_replacement_only,replace=>$_< + abc\=ps,substitute_replacement_only,replace=>$'< # End of testinput2 diff --git a/testdata/testinput26 b/testdata/testinput26 index 0d262ee..61d827b 100644 --- a/testdata/testinput26 +++ b/testdata/testinput26 @@ -604,7 +604,7 @@ # Character not in script /^\p{Han}/utf - \x{323b0} + \x{3347a} # Base script check /^\p{sc=Yi}/utf @@ -2562,7 +2562,7 @@ # Character not in script /^\p{Tangut}/utf - \x{18d09} + \x{18d20} # Base script check /^\p{sc=Nushu}/utf diff --git a/testdata/testinput27 b/testdata/testinput27 index 495906c..8f444b0 100644 --- a/testdata/testinput27 +++ b/testdata/testinput27 @@ -2,7 +2,7 @@ # data, do not edit unless that data has changed and they are reflecting # a previous version. -# Unicode Script Extension tests for version 16.0.0 +# Unicode Script Extension tests for version 17.0.0 #perltest @@ -761,7 +761,7 @@ \x{2e80} /^\p{Script=Hani}/utf - \x{323af} + \x{33479} # Script extension check /^\p{Han}/utf @@ -779,7 +779,7 @@ # Character not in script /^\p{Han}/utf - \x{323b0} + \x{3347a} # Base script check /^\p{sc=Yi}/utf @@ -1143,7 +1143,7 @@ \x{302} /^\p{Script_Extensions=Tfng}/utf - \x{309} + \x{323} # Script extension only character /^\p{Tifinagh}/utf @@ -1561,7 +1561,7 @@ \x{11180} /^\p{Script=Shrd}/utf - \x{111df} + \x{11b67} # Script extension check /^\p{Sharada}/utf @@ -1579,7 +1579,7 @@ # Character not in script /^\p{Sharada}/utf - \x{111e0} + \x{11b68} # Base script check /^\p{sc=Takri}/utf @@ -2006,6 +2006,31 @@ /^\p{Adlam}/utf \x{1e960} +# Base script check +/^\p{sc=Newa}/utf + \x{11400} + +/^\p{Script=Newa}/utf + \x{11461} + +# Script extension check +/^\p{Newa}/utf + \x{951} + +/^\p{scx=Newa}/utf + \x{1ced} + +# Script extension only character +/^\p{Newa}/utf + \x{951} + +/^\p{sc=Newa}/utf + \x{951} + +# Character not in script +/^\p{Newa}/utf + \x{11462} + # Base script check /^\p{sc=Osage}/utf \x{104b0} @@ -2017,7 +2042,7 @@ /^\p{Osage}/utf \x{301} -/^\p{scx=Osge}/utf +/^\p{Script_Extensions=Osge}/utf \x{358} # Script extension only character @@ -2036,13 +2061,13 @@ \x{16fe0} /^\p{Script=Tang}/utf - \x{18d08} + \x{18df2} # Script extension check /^\p{Tangut}/utf \x{2ff0} -/^\p{Script_Extensions=Tang}/utf +/^\p{scx=Tang}/utf \x{31ef} # Script extension only character @@ -2054,7 +2079,7 @@ # Character not in script /^\p{Tangut}/utf - \x{18d09} + \x{18df3} # Base script check /^\p{sc=Masaram_Gondi}/utf @@ -2067,7 +2092,7 @@ /^\p{Masaram_Gondi}/utf \x{964} -/^\p{scx=Gonm}/utf +/^\p{Script_Extensions=Gonm}/utf \x{965} # Script extension only character @@ -2092,7 +2117,7 @@ /^\p{Dogra}/utf \x{964} -/^\p{Script_Extensions=Dogr}/utf +/^\p{scx=Dogr}/utf \x{a839} # Script extension only character @@ -2117,7 +2142,7 @@ /^\p{Gunjala_Gondi}/utf \x{b7} -/^\p{scx=Gong}/utf +/^\p{Script_Extensions=Gong}/utf \x{965} # Script extension only character @@ -2142,7 +2167,7 @@ /^\p{Hanifi_Rohingya}/utf \x{60c} -/^\p{Script_Extensions=Rohg}/utf +/^\p{scx=Rohg}/utf \x{6d4} # Script extension only character @@ -2167,7 +2192,7 @@ /^\p{Sogdian}/utf \x{640} -/^\p{scx=Sogd}/utf +/^\p{Script_Extensions=Sogd}/utf \x{640} # Script extension only character @@ -2190,17 +2215,17 @@ # Script extension check /^\p{Nandinagari}/utf - \x{964} + \x{951} -/^\p{Script_Extensions=Nand}/utf +/^\p{scx=Nand}/utf \x{a835} # Script extension only character /^\p{Nandinagari}/utf - \x{964} + \x{951} /^\p{sc=Nandinagari}/utf - \x{964} + \x{951} # Character not in script /^\p{Nandinagari}/utf @@ -2217,7 +2242,7 @@ /^\p{Yezidi}/utf \x{60c} -/^\p{scx=Yezi}/utf +/^\p{Script_Extensions=Yezi}/utf \x{669} # Script extension only character @@ -2242,7 +2267,7 @@ /^\p{Cypro_Minoan}/utf \x{10100} -/^\p{Script_Extensions=Cpmn}/utf +/^\p{scx=Cpmn}/utf \x{10101} # Script extension only character @@ -2267,7 +2292,7 @@ /^\p{Old_Uyghur}/utf \x{640} -/^\p{scx=Ougr}/utf +/^\p{Script_Extensions=Ougr}/utf \x{10af2} # Script extension only character @@ -2292,7 +2317,7 @@ /^\p{Toto}/utf \x{2bc} -/^\p{Script_Extensions=Toto}/utf +/^\p{scx=Toto}/utf \x{2bc} # Script extension only character @@ -2317,7 +2342,7 @@ /^\p{Garay}/utf \x{60c} -/^\p{scx=Gara}/utf +/^\p{Script_Extensions=Gara}/utf \x{61f} # Script extension only character @@ -2342,7 +2367,7 @@ /^\p{Gurung_Khema}/utf \x{965} -/^\p{Script_Extensions=Gukh}/utf +/^\p{scx=Gukh}/utf \x{965} # Script extension only character @@ -2367,7 +2392,7 @@ /^\p{Ol_Onal}/utf \x{964} -/^\p{scx=Onao}/utf +/^\p{Script_Extensions=Onao}/utf \x{965} # Script extension only character @@ -2392,7 +2417,7 @@ /^\p{Sunuwar}/utf \x{300} -/^\p{Script_Extensions=Sunu}/utf +/^\p{scx=Sunu}/utf \x{331} # Script extension only character @@ -2417,7 +2442,7 @@ /^\p{Todhri}/utf \x{301} -/^\p{scx=Todr}/utf +/^\p{Script_Extensions=Todr}/utf \x{35e} # Script extension only character @@ -2442,7 +2467,7 @@ /^\p{Tulu_Tigalari}/utf \x{ce6} -/^\p{Script_Extensions=Tutg}/utf +/^\p{scx=Tutg}/utf \x{a8f1} # Script extension only character @@ -3050,17 +3075,6 @@ /^\p{Marchen}/utf \x{11cb7} -# Base script check -/^\p{sc=Newa}/utf - \x{11400} - -/^\p{Script=Newa}/utf - \x{11461} - -# Character not in script -/^\p{Newa}/utf - \x{11462} - # Base script check /^\p{sc=Nushu}/utf \x{16fe1} @@ -3248,4 +3262,48 @@ /^\p{Kirat_Rai}/utf \x{16d7a} +# Base script check +/^\p{sc=Sidetic}/utf + \x{10940} + +/^\p{Script=Sidt}/utf + \x{10959} + +# Character not in script +/^\p{Sidetic}/utf + \x{1095a} + +# Base script check +/^\p{sc=Tai_Yo}/utf + \x{1e6c0} + +/^\p{Script=Tayo}/utf + \x{1e6ff} + +# Character not in script +/^\p{Tai_Yo}/utf + \x{1e700} + +# Base script check +/^\p{sc=Tolong_Siki}/utf + \x{11db0} + +/^\p{Script=Tols}/utf + \x{11de9} + +# Character not in script +/^\p{Tolong_Siki}/utf + \x{11dea} + +# Base script check +/^\p{sc=Beria_Erfe}/utf + \x{16ea0} + +/^\p{Script=Berf}/utf + \x{16ed3} + +# Character not in script +/^\p{Beria_Erfe}/utf + \x{16ed4} + # End of test diff --git a/testdata/testinput5 b/testdata/testinput5 index 7f9f6a2..098f410 100644 --- a/testdata/testinput5 +++ b/testdata/testinput5 @@ -2892,6 +2892,12 @@ /([\x{6535}\x{6536}\x{6538}\x{6539}\x{653b}\x{653c}\x{653e}\x{653f}\x{6541}\x{6542}\x{8000}-\x{ffff}]#)+/B,utf \x{6534}#\x{6537}#\x{653a}#\x{653d}#\x{6540}#\x{6543}#\x{7fff}#\x{6535}#\x{6536}#\x{6538}#\x{6539}#\x{653b}#\x{653c}#\x{653e}#\x{653f}#\x{6541}#\x{6542}#\x{8000}#\x{c246}#\x{ffff} +/[\x{ff}\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf + \x{ff}\x{100}\x{8000}\x{800a}\x{800e}\x{101} + +/[\x{ff}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf + \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e}\x{105} + /[[:xdigit:]\x{400}-\x{600}]+/utf,ucp !a0\x{400}\x{600}9\x{3ff} @@ -3610,4 +3616,9 @@ \x{e1} \x{c1} +# An unterminated \N{U+ escape at the end of the pattern must +# report an error offset that lies within the pattern. + +/(*UTF)\N{U+2/ + # End of testinput5 diff --git a/testdata/testoutput10 b/testdata/testoutput10 index b8add04..393ac20 100644 --- a/testdata/testoutput10 +++ b/testdata/testoutput10 @@ -1779,6 +1779,20 @@ No match AAA\x80BBXYZ No match +/(?<=(.))/utf,match_invalid_utf + x\x80 + 0: + 1: x + \x{10000}\x80 + 0: + 1: \x{10000} + +/\b./utf,match_invalid_utf + \x{10000}s + 0: s + \xf0s + 0: s + # ------------------------------------- /(*UTF)(?=\x{123})/I diff --git a/testdata/testoutput12-16 b/testdata/testoutput12-16 index 4883f5e..d235c11 100644 --- a/testdata/testoutput12-16 +++ b/testdata/testoutput12-16 @@ -1659,6 +1659,22 @@ No match 0: ab 1: ab +/(?<=(.))/utf,match_invalid_utf + x\x{d800} + 0: + 1: x + \x{10000}\x{dc00} + 0: + 1: \x{10000} + +/\b./utf,match_invalid_utf + \x{10000}s + 0: s + \x{d800}s + 0: s + \x{dc00}s + 0: s + # ---------------------------------------------------- /(*UTF)(?=\x{123})/I diff --git a/testdata/testoutput12-32 b/testdata/testoutput12-32 index 5a4255f..725cb27 100644 --- a/testdata/testoutput12-32 +++ b/testdata/testoutput12-32 @@ -1658,6 +1658,22 @@ No match 0: ab 1: ab +/(?<=(.))/utf,match_invalid_utf + x\x{d800} + 0: + 1: x + \x{10000}\x{dc00} + 0: + 1: \x{10000} + +/\b./utf,match_invalid_utf + \x{10000}s + 0: s + \x{d800}s + 0: s + \x{dc00}s + 0: s + # ---------------------------------------------------- /(*UTF)(?=\x{123})/I diff --git a/testdata/testoutput17 b/testdata/testoutput17 index 6d55008..c678587 100644 --- a/testdata/testoutput17 +++ b/testdata/testoutput17 @@ -539,13 +539,38 @@ Failed: error -47: match limit exceeded 0: abc (JIT) abc\=no_jit 0: abc - + +/(*NO_JIT)abc/ + abc + 0: abc + /abc/jitfast abc 0: abc (JIT) abc\=no_jit + 0: abc + +/(*NO_JIT)abc/jitfast +\= Expect error + abc +Failed: error -45: bad JIT option + +# Do not leak a previously copied subject with jitfast (#920) + +/abc/jitfast + abc\=copy_matched_subject,no_jit + 0: abc + abc 0: abc (JIT) - + +/abc/jitfast + abc\=copy_matched_subject + 0: abc (JIT) + abc\=null_context + 0: abc (JIT) + abc\=null_context,no_jit + 0: abc + # ---- /[aC]/mg,firstline,newline=lf @@ -601,4 +626,21 @@ Failed: error -37: callout error code 1 ^ a Failed: error -37: callout error code +# Check UTF validation when falling back from a partially-compiled JIT pattern +# to the interpreter + +#if unicode + +/\b/B,utf,ucp,jit=1 +------------------------------------------------------------------ + Bra + \b (ucp) + Ket + End +------------------------------------------------------------------ + \xff\x00\x00\=offset=2,ps +Partial match: + +#endif + # End of testinput17 diff --git a/testdata/testoutput2 b/testdata/testoutput2 index 23738a3..897c026 100644 --- a/testdata/testoutput2 +++ b/testdata/testoutput2 @@ -13630,6 +13630,14 @@ Failed: error 167 at offset 8: non-hex character in \x{} (closing brace missing? Failed: error 178 at offset 5: digits missing after \x or in \x{} or \o{} or \N{U+} here: ^A\x{ |<--| +/\x{2/ +Failed: error 167 at offset 4: non-hex character in \x{} (closing brace missing?) + here: \x{2 |<--| + +/\o{7/ +Failed: error 164 at offset 4: non-octal character in \o{} (closing brace missing?) + here: \o{7 |<--| + /[ab]++/B,no_auto_possess ------------------------------------------------------------------ Bra @@ -21765,6 +21773,23 @@ Failed: error 207 at offset 117: extended character class nesting is too deep Failed: error 106 at offset 3: missing terminating ] for character class here: [z& |<--| +/(?<=[12[34]])/alt_extended_class + 1 + 0: + 2 + 0: + 3 + 0: + 4 + 0: + 1] + 0: +\= Expect no match + 5 +No match + [] +No match + /[[^]~~[^]]/B,alt_extended_class,allow_empty_class ------------------------------------------------------------------ Bra @@ -21786,6 +21811,27 @@ No match a 0: a +/[\d--1].(?| (\n)&\n)))... +/(?[\d-[1]]).(?BAR)?/substitute_extended,replace=X${Bar:+\:\:text}Y + foo + 1: XY + fooBAR + 1: X::textY + +# -------------- +# Tests for substitution with partial +# -------------- + +/(a)b+/ +\= Expect to fail with "bad option" + ab\=ph,replace=FOO +Failed: error -34: bad option value +\= Expect to fail with "partial match" + ab\=ph,substitute_replacement_only,replace=FOO +Failed: error -2: partial match +\= Expect success + abc\=ph,substitute_replacement_only,replace=FOO + 1: FOO + zabc\=ph,substitute_replacement_only,replace=>$&|$1|$`< + 1: >ab|a|z< +\= Expect to fail with PCRE2_ERROR_PARTIALSUBS + abc\=ph,substitute_replacement_only,replace=>$_< +Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match + here: >$_ |<--| < + abc\=ph,substitute_replacement_only,replace=>$'< +Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match + here: >$' |<--| < + +/(a)b+/ +\= Expect to fail with "bad option" + ab\=ps,replace=FOO +Failed: error -34: bad option value +\= Expect to fail with "partial match" + a\=ps,substitute_replacement_only,replace=FOO +Failed: error -2: partial match +\= Expect success + ab\=ps,substitute_replacement_only,replace=FOO + 1: FOO + abc\=ps,substitute_replacement_only,replace=FOO + 1: FOO + zabc\=ps,substitute_replacement_only,replace=>$&|$1|$`< + 1: >ab|a|z< +\= Expect to fail with PCRE2_ERROR_PARTIALSUBS + abc\=ps,substitute_replacement_only,replace=>$_< +Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match + here: >$_ |<--| < + abc\=ps,substitute_replacement_only,replace=>$'< +Failed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match + here: >$' |<--| < # End of testinput2 Error -80: PCRE2_ERROR_BADDATA (unknown error number) diff --git a/testdata/testoutput26 b/testdata/testoutput26 index b1f00a1..575d953 100644 --- a/testdata/testoutput26 +++ b/testdata/testoutput26 @@ -771,7 +771,7 @@ No match # Character not in script /^\p{Han}/utf - \x{323b0} + \x{3347a} No match # Base script check @@ -3271,7 +3271,7 @@ No match # Character not in script /^\p{Tangut}/utf - \x{18d09} + \x{18d20} No match # Base script check diff --git a/testdata/testoutput27 b/testdata/testoutput27 index 9cf33bf..89d5cc1 100644 --- a/testdata/testoutput27 +++ b/testdata/testoutput27 @@ -2,7 +2,7 @@ # data, do not edit unless that data has changed and they are reflecting # a previous version. -# Unicode Script Extension tests for version 16.0.0 +# Unicode Script Extension tests for version 17.0.0 #perltest @@ -972,8 +972,8 @@ No match 0: \x{2e80} /^\p{Script=Hani}/utf - \x{323af} - 0: \x{323af} + \x{33479} + 0: \x{33479} # Script extension check /^\p{Han}/utf @@ -995,7 +995,7 @@ No match # Character not in script /^\p{Han}/utf - \x{323b0} + \x{3347a} No match # Base script check @@ -1461,8 +1461,8 @@ No match 0: \x{302} /^\p{Script_Extensions=Tfng}/utf - \x{309} - 0: \x{309} + \x{323} + 0: \x{323} # Script extension only character /^\p{Tifinagh}/utf @@ -1996,8 +1996,8 @@ No match 0: \x{11180} /^\p{Script=Shrd}/utf - \x{111df} - 0: \x{111df} + \x{11b67} + 0: \x{11b67} # Script extension check /^\p{Sharada}/utf @@ -2019,7 +2019,7 @@ No match # Character not in script /^\p{Sharada}/utf - \x{111e0} + \x{11b68} No match # Base script check @@ -2566,6 +2566,38 @@ No match \x{1e960} No match +# Base script check +/^\p{sc=Newa}/utf + \x{11400} + 0: \x{11400} + +/^\p{Script=Newa}/utf + \x{11461} + 0: \x{11461} + +# Script extension check +/^\p{Newa}/utf + \x{951} + 0: \x{951} + +/^\p{scx=Newa}/utf + \x{1ced} + 0: \x{1ced} + +# Script extension only character +/^\p{Newa}/utf + \x{951} + 0: \x{951} + +/^\p{sc=Newa}/utf + \x{951} +No match + +# Character not in script +/^\p{Newa}/utf + \x{11462} +No match + # Base script check /^\p{sc=Osage}/utf \x{104b0} @@ -2580,7 +2612,7 @@ No match \x{301} 0: \x{301} -/^\p{scx=Osge}/utf +/^\p{Script_Extensions=Osge}/utf \x{358} 0: \x{358} @@ -2604,15 +2636,15 @@ No match 0: \x{16fe0} /^\p{Script=Tang}/utf - \x{18d08} - 0: \x{18d08} + \x{18df2} + 0: \x{18df2} # Script extension check /^\p{Tangut}/utf \x{2ff0} 0: \x{2ff0} -/^\p{Script_Extensions=Tang}/utf +/^\p{scx=Tang}/utf \x{31ef} 0: \x{31ef} @@ -2627,7 +2659,7 @@ No match # Character not in script /^\p{Tangut}/utf - \x{18d09} + \x{18df3} No match # Base script check @@ -2644,7 +2676,7 @@ No match \x{964} 0: \x{964} -/^\p{scx=Gonm}/utf +/^\p{Script_Extensions=Gonm}/utf \x{965} 0: \x{965} @@ -2676,7 +2708,7 @@ No match \x{964} 0: \x{964} -/^\p{Script_Extensions=Dogr}/utf +/^\p{scx=Dogr}/utf \x{a839} 0: \x{a839} @@ -2708,7 +2740,7 @@ No match \x{b7} 0: \x{b7} -/^\p{scx=Gong}/utf +/^\p{Script_Extensions=Gong}/utf \x{965} 0: \x{965} @@ -2740,7 +2772,7 @@ No match \x{60c} 0: \x{60c} -/^\p{Script_Extensions=Rohg}/utf +/^\p{scx=Rohg}/utf \x{6d4} 0: \x{6d4} @@ -2772,7 +2804,7 @@ No match \x{640} 0: \x{640} -/^\p{scx=Sogd}/utf +/^\p{Script_Extensions=Sogd}/utf \x{640} 0: \x{640} @@ -2801,20 +2833,20 @@ No match # Script extension check /^\p{Nandinagari}/utf - \x{964} - 0: \x{964} + \x{951} + 0: \x{951} -/^\p{Script_Extensions=Nand}/utf +/^\p{scx=Nand}/utf \x{a835} 0: \x{a835} # Script extension only character /^\p{Nandinagari}/utf - \x{964} - 0: \x{964} + \x{951} + 0: \x{951} /^\p{sc=Nandinagari}/utf - \x{964} + \x{951} No match # Character not in script @@ -2836,7 +2868,7 @@ No match \x{60c} 0: \x{60c} -/^\p{scx=Yezi}/utf +/^\p{Script_Extensions=Yezi}/utf \x{669} 0: \x{669} @@ -2868,7 +2900,7 @@ No match \x{10100} 0: \x{10100} -/^\p{Script_Extensions=Cpmn}/utf +/^\p{scx=Cpmn}/utf \x{10101} 0: \x{10101} @@ -2900,7 +2932,7 @@ No match \x{640} 0: \x{640} -/^\p{scx=Ougr}/utf +/^\p{Script_Extensions=Ougr}/utf \x{10af2} 0: \x{10af2} @@ -2932,7 +2964,7 @@ No match \x{2bc} 0: \x{2bc} -/^\p{Script_Extensions=Toto}/utf +/^\p{scx=Toto}/utf \x{2bc} 0: \x{2bc} @@ -2964,7 +2996,7 @@ No match \x{60c} 0: \x{60c} -/^\p{scx=Gara}/utf +/^\p{Script_Extensions=Gara}/utf \x{61f} 0: \x{61f} @@ -2996,7 +3028,7 @@ No match \x{965} 0: \x{965} -/^\p{Script_Extensions=Gukh}/utf +/^\p{scx=Gukh}/utf \x{965} 0: \x{965} @@ -3028,7 +3060,7 @@ No match \x{964} 0: \x{964} -/^\p{scx=Onao}/utf +/^\p{Script_Extensions=Onao}/utf \x{965} 0: \x{965} @@ -3060,7 +3092,7 @@ No match \x{300} 0: \x{300} -/^\p{Script_Extensions=Sunu}/utf +/^\p{scx=Sunu}/utf \x{331} 0: \x{331} @@ -3092,7 +3124,7 @@ No match \x{301} 0: \x{301} -/^\p{scx=Todr}/utf +/^\p{Script_Extensions=Todr}/utf \x{35e} 0: \x{35e} @@ -3124,7 +3156,7 @@ No match \x{ce6} 0: \x{ce6} -/^\p{Script_Extensions=Tutg}/utf +/^\p{scx=Tutg}/utf \x{a8f1} 0: \x{a8f1} @@ -3898,20 +3930,6 @@ No match \x{11cb7} No match -# Base script check -/^\p{sc=Newa}/utf - \x{11400} - 0: \x{11400} - -/^\p{Script=Newa}/utf - \x{11461} - 0: \x{11461} - -# Character not in script -/^\p{Newa}/utf - \x{11462} -No match - # Base script check /^\p{sc=Nushu}/utf \x{16fe1} @@ -4150,4 +4168,60 @@ No match \x{16d7a} No match +# Base script check +/^\p{sc=Sidetic}/utf + \x{10940} + 0: \x{10940} + +/^\p{Script=Sidt}/utf + \x{10959} + 0: \x{10959} + +# Character not in script +/^\p{Sidetic}/utf + \x{1095a} +No match + +# Base script check +/^\p{sc=Tai_Yo}/utf + \x{1e6c0} + 0: \x{1e6c0} + +/^\p{Script=Tayo}/utf + \x{1e6ff} + 0: \x{1e6ff} + +# Character not in script +/^\p{Tai_Yo}/utf + \x{1e700} +No match + +# Base script check +/^\p{sc=Tolong_Siki}/utf + \x{11db0} + 0: \x{11db0} + +/^\p{Script=Tols}/utf + \x{11de9} + 0: \x{11de9} + +# Character not in script +/^\p{Tolong_Siki}/utf + \x{11dea} +No match + +# Base script check +/^\p{sc=Beria_Erfe}/utf + \x{16ea0} + 0: \x{16ea0} + +/^\p{Script=Berf}/utf + \x{16ed3} + 0: \x{16ed3} + +# Character not in script +/^\p{Beria_Erfe}/utf + \x{16ed4} +No match + # End of test diff --git a/testdata/testoutput5 b/testdata/testoutput5 index fd36974..0337d6a 100644 --- a/testdata/testoutput5 +++ b/testdata/testoutput5 @@ -6339,6 +6339,26 @@ Failed: error 115 at offset 53: reference to non-existent subpattern 0: \x{6535}#\x{6536}#\x{6538}#\x{6539}#\x{653b}#\x{653c}#\x{653e}#\x{653f}#\x{6541}#\x{6542}#\x{8000}#\x{c246}# 1: \x{c246}# +/[\x{ff}\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf +------------------------------------------------------------------ + Bra + [\xff\x{100}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]++ + Ket + End +------------------------------------------------------------------ + \x{ff}\x{100}\x{8000}\x{800a}\x{800e}\x{101} + 0: \x{ff}\x{100}\x{8000}\x{800a}\x{800e} + +/[\x{ff}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]+/B,utf +------------------------------------------------------------------ + Bra + [\xff\x{100}-\x{104}\x{8000}\x{8002}\x{8004}\x{8006}\x{8008}\x{800a}\x{800c}\x{800e}]++ + Ket + End +------------------------------------------------------------------ + \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e}\x{105} + 0: \x{ff}\x{100}\x{101}\x{104}\x{8000}\x{800a}\x{800e} + /[[:xdigit:]\x{400}-\x{600}]+/utf,ucp !a0\x{400}\x{600}9\x{3ff} 0: a0\x{400}\x{600}9 @@ -8315,4 +8335,11 @@ Failed: error 150 at offset 5: invalid range in character class \x{c1} 0: \x{c1} +# An unterminated \N{U+ escape at the end of the pattern must +# report an error offset that lies within the pattern. + +/(*UTF)\N{U+2/ +Failed: error 167 at offset 12: non-hex character in \x{} (closing brace missing?) + here: ...UTF)\N{U+2 |<--| + # End of testinput5 diff --git a/testdata/testoutput8-16-2 b/testdata/testoutput8-16-2 index b8dba98..c16e466 100644 --- a/testdata/testoutput8-16-2 +++ b/testdata/testoutput8-16-2 @@ -811,29 +811,27 @@ Memory allocation - code size : 14 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 50 Bra + 0 46 Bra 2 4 Recurse 4 3 CBra 1 7 3 Ket - 9 39 CBra 2 - 12 32 CBra 3 - 15 27 CBra 4 - 18 22 CBra 5 - 21 15 CBra 6 - 24 10 CBra 7 - 27 5 Once - 29 \g{1}+ - 32 5 Ket - 34 10 Ket - 36 15 Ket - 38 \x{85} - 40 22 KetRmax - 42 27 Ket - 44 2 Alt - 46 34 Ket - 48 39 Ket - 50 50 Ket - 52 End + 9 35 CBra 2 + 12 28 CBra 3 + 15 23 CBra 4 + 18 18 CBra 5 + 21 11 CBra 6 + 24 6 CBra 7 + 27 \g{1}++ + 30 6 Ket + 32 11 Ket + 34 \x{85} + 36 18 KetRmax + 38 23 Ket + 40 2 Alt + 42 30 Ket + 44 35 Ket + 46 46 Ket + 48 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit diff --git a/testdata/testoutput8-16-4 b/testdata/testoutput8-16-4 index f2c2d2d..e3f30df 100644 --- a/testdata/testoutput8-16-4 +++ b/testdata/testoutput8-16-4 @@ -811,29 +811,27 @@ Memory allocation - code size : 18 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 69 Bra + 0 63 Bra 3 6 Recurse 6 4 CBra 1 10 4 Ket - 13 53 CBra 2 - 17 43 CBra 3 - 21 36 CBra 4 - 25 29 CBra 5 - 29 20 CBra 6 - 33 13 CBra 7 - 37 6 Once - 40 \g{1}+ - 43 6 Ket - 46 13 Ket - 49 20 Ket - 52 \x{85} - 54 29 KetRmax - 57 36 Ket - 60 3 Alt - 63 46 Ket - 66 53 Ket - 69 69 Ket - 72 End + 13 47 CBra 2 + 17 37 CBra 3 + 21 30 CBra 4 + 25 23 CBra 5 + 29 14 CBra 6 + 33 7 CBra 7 + 37 \g{1}++ + 40 7 Ket + 43 14 Ket + 46 \x{85} + 48 23 KetRmax + 51 30 Ket + 54 3 Alt + 57 40 Ket + 60 47 Ket + 63 63 Ket + 66 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit diff --git a/testdata/testoutput8-32-4 b/testdata/testoutput8-32-4 index 670e55a..7648654 100644 --- a/testdata/testoutput8-32-4 +++ b/testdata/testoutput8-32-4 @@ -811,29 +811,27 @@ Memory allocation - code size : 28 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 50 Bra + 0 46 Bra 2 4 Recurse 4 3 CBra 1 7 3 Ket - 9 39 CBra 2 - 12 32 CBra 3 - 15 27 CBra 4 - 18 22 CBra 5 - 21 15 CBra 6 - 24 10 CBra 7 - 27 5 Once - 29 \g{1}+ - 32 5 Ket - 34 10 Ket - 36 15 Ket - 38 \x{85} - 40 22 KetRmax - 42 27 Ket - 44 2 Alt - 46 34 Ket - 48 39 Ket - 50 50 Ket - 52 End + 9 35 CBra 2 + 12 28 CBra 3 + 15 23 CBra 4 + 18 18 CBra 5 + 21 11 CBra 6 + 24 6 CBra 7 + 27 \g{1}++ + 30 6 Ket + 32 11 Ket + 34 \x{85} + 36 18 KetRmax + 38 23 Ket + 40 2 Alt + 42 30 Ket + 44 35 Ket + 46 46 Ket + 48 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit diff --git a/testdata/testoutput8-8-2 b/testdata/testoutput8-8-2 index 13b976e..23da6cb 100644 --- a/testdata/testoutput8-8-2 +++ b/testdata/testoutput8-8-2 @@ -811,29 +811,27 @@ Memory allocation - code size : 10 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 77 Bra + 0 71 Bra 3 6 Recurse 6 5 CBra 1 11 5 Ket - 14 60 CBra 2 - 19 49 CBra 3 - 24 41 CBra 4 - 29 33 CBra 5 - 34 23 CBra 6 - 39 15 CBra 7 - 44 7 Once - 47 \g{1}+ - 51 7 Ket - 54 15 Ket - 57 23 Ket - 60 \x{85} - 62 33 KetRmax - 65 41 Ket - 68 3 Alt - 71 52 Ket - 74 60 Ket - 77 77 Ket - 80 End + 14 54 CBra 2 + 19 43 CBra 3 + 24 35 CBra 4 + 29 27 CBra 5 + 34 17 CBra 6 + 39 9 CBra 7 + 44 \g{1}++ + 48 9 Ket + 51 17 Ket + 54 \x{85} + 56 27 KetRmax + 59 35 Ket + 62 3 Alt + 65 46 Ket + 68 54 Ket + 71 71 Ket + 74 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit diff --git a/testdata/testoutput8-8-3 b/testdata/testoutput8-8-3 index 8c0abe1..0fa59f9 100644 --- a/testdata/testoutput8-8-3 +++ b/testdata/testoutput8-8-3 @@ -811,29 +811,27 @@ Memory allocation - code size : 12 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 96 Bra + 0 88 Bra 4 8 Recurse 8 6 CBra 1 14 6 Ket - 18 74 CBra 2 - 24 60 CBra 3 - 30 50 CBra 4 - 36 40 CBra 5 - 42 28 CBra 6 - 48 18 CBra 7 - 54 8 Once - 58 \g{1}+ - 62 8 Ket - 66 18 Ket - 70 28 Ket - 74 \x{85} - 76 40 KetRmax - 80 50 Ket - 84 4 Alt - 88 64 Ket - 92 74 Ket - 96 96 Ket -100 End + 18 66 CBra 2 + 24 52 CBra 3 + 30 42 CBra 4 + 36 32 CBra 5 + 42 20 CBra 6 + 48 10 CBra 7 + 54 \g{1}++ + 58 10 Ket + 62 20 Ket + 66 \x{85} + 68 32 KetRmax + 72 42 Ket + 76 4 Alt + 80 56 Ket + 84 66 Ket + 88 88 Ket + 92 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit diff --git a/testdata/testoutput8-8-4 b/testdata/testoutput8-8-4 index 3377845..c6adb16 100644 --- a/testdata/testoutput8-8-4 +++ b/testdata/testoutput8-8-4 @@ -811,29 +811,27 @@ Memory allocation - code size : 14 /(?1)()((((((\1++))\x85)+)|))/ ------------------------------------------------------------------ - 0 115 Bra + 0 105 Bra 5 10 Recurse 10 7 CBra 1 17 7 Ket - 22 88 CBra 2 - 29 71 CBra 3 - 36 59 CBra 4 - 43 47 CBra 5 - 50 33 CBra 6 - 57 21 CBra 7 - 64 9 Once - 69 \g{1}+ - 73 9 Ket - 78 21 Ket - 83 33 Ket - 88 \x{85} - 90 47 KetRmax - 95 59 Ket -100 5 Alt -105 76 Ket -110 88 Ket -115 115 Ket -120 End + 22 78 CBra 2 + 29 61 CBra 3 + 36 49 CBra 4 + 43 37 CBra 5 + 50 23 CBra 6 + 57 11 CBra 7 + 64 \g{1}++ + 68 11 Ket + 73 23 Ket + 78 \x{85} + 80 37 KetRmax + 85 49 Ket + 90 5 Alt + 95 66 Ket +100 78 Ket +105 105 Ket +110 End ------------------------------------------------------------------ # Check the absolute limit on nesting (?| etc. This varies with code unit -- 2.30.2